此方法作为官方示例发布。
->where("price < $minimumPrice OR price > $maximumPrice")这样的方法安全吗?
想把它写成价格(“->where<?或价格> ?",$minimumPrice,$maximumPrice)有什么毒性吗?
并且我不能将它拆分为2个where语句,因为计划编写查询->where("1 OR 2") ->where("3 OR 4")
发布于 2010-10-14 05:54:26
如果我有复杂的WHERE子句,我会使用数据库适配器的->quoteInto()方法,如下所示:
$where = '('
. $dbAdapter->quoteInto('price1 < ?', $price1)
. ' OR '
. $dbAdapter->quoteInto('price1 > ?', $price1)
. ')'
. ' AND '
. '('
. $dbAdapter->quoteInto('price2 < ?', $price2)
. ' OR '
. $dbAdapter->quoteInto('price2 > ?', $price2)
. ')'
;
$select->where($where);发布于 2010-10-10 17:54:20
试试这个:
$query->where('(price < ?', $minPrice)
->orWhere('price > ?)', $maxPrice)
->where('some = ?', $some_other_variable);结果:where ((price < $minPrice) OR (price > $maxPrice)) AND (some = $some_other_variable)
请注意OR部分中的双(( ))
发布于 2011-08-10 22:20:11
有时,您可能希望进行SQL查询,其中多个where条件周围有括号,这些条件可以很容易地使用foreach进行解析,但是您不希望为字符串操作而烦恼。例如,您有一个id为的用户列表,这些用户必须是特定类型的,您可以尝试这样做:
$select = $this->select();
$subWhere = $this->select();
foreach(array_keys($idArr) as $key => $value) {
$subWhere->orWhere('id=?', $value);
}
$select->where(implode(' ', $subWhere->getPart('WHERE')))->where('type=?', 'customer');这将导致"SELECT * FROM table WHERE ((id=X) OR (id=Y) OR (id=Z)...) AND (type='customer');“
这个想法进一步发展,你可以扩展Zend_Db_Table_Abstract:
public function subWhere($col, $binds, $operands, $andOr = 'OR' )
{
$subWhere = $this->select();
if(strtolower($andOr) == 'or') {
foreach($binds as $key => $value) {
$subWhere->orWhere($col.$operands[$key].'?', $value);
}
return implode(' ', $subWhere->getPart('WHERE'));
}
elseif (strtolower($andOr) == 'and') {
foreach ($binds as $key => $value) {
$subWhere->where($col.$operands[$key].'?', $value);
}
return implode(' ', $subWhere->getPart('WHERE'));
}
else {
return false;
}
}并将其用作:
$this->select()->where($this->subWhere($col, $binds, $operands));当然,您应该允许混合数组,$operands = $cols ()缺省为'=?‘等等,但为了简单起见,我省略了这一点。但我认为我们应该使用本机SQL函数,如IN(),在...还有...不是在..。然后呢?不过,Zend Framework并不能让你的生活变得非常轻松。
https://stackoverflow.com/questions/3899795
复制相似问题