如何在仍然使用引号的情况下将这样的内容添加到Zend_Db_Select中?
SELECT x FROM y WHERE (a=1 OR b=2) AND (c=3 OR d=4)
我已经看过where()和orWhere(),但我看不到用括号对它们进行分组的方法。我意识到我可以写下这个:
->where('(a=1 OR b=2) AND (c=3 OR d=4)')
但理想情况下,我想对where()进行4次单独调用,以便能够使用第二个参数进行引用(假设值1,2,3等是用户生成的输入)。
有没有办法以纯粹流利的方式做到这一点?
答案 0 :(得分:4)
有没有办法以纯粹流利的方式做到这一点?
简答:不。
正如您所提到的,您可以使用orWhere
来编写(a = ?) OR (b = ?)
等条件。
Zend_Db_Select使用where()或orWhere()方法自动在您指定的每个表达式周围放置括号。这有助于确保布尔运算符优先级不会导致意外结果。
然而,按你希望的方式not possible to nest AND
and OR
conditions。
如果你这样写:
->where('a=?', $a)
->orWhere('b=?', $b)
->where('c=?', $c)
->orWhere('d=?', $d)
这会导致SQL类似于:
(a=1) OR (b=2) AND (c=3) OR (d=4)
将解释如下(不是您想要的):
(a=1) OR ((b=2) AND (c=3)) OR (d=4)
备选方案:
quoteInto
作为演示here。