我正在尝试使用一个带有多个绑定参数的Zend_Db_Table对象来编写查询。在输入真实值之前,我的查询运行如下:
$mytbl = new MyTable();
$myresults = $mytbl->fetchAll(
"(col1 LIKE 'val1' AND col2 LIKE 'val2')
OR (col1 LIKE 'val2' AND col2 LIKE 'val1'))
AND col3 = 'val3');这是可行的--除非我的变量没有被正确地引用。然后,我尝试将第二行替换为:
$mytbl->fetchAll(
"(col1 LIKE ? AND col2 LIKE ?)
OR (col1 LIKE ? AND col2 LIKE ?))
AND col3 = ?,
array(
$db->quote($val1),
$db->quote($val2),
$db->quote($val2),
$db->quote($val1),
$db->quote($val3)));但是之后我得到了一个SQL错误,参数的数量不匹配。所以我试着:
$mytbl->fetchAll(
$mytbl->select()
->where("(col1 LIKE ? AND col2 LIKE ?)
OR (col1 LIKE ? AND col2 LIKE ?)) AND col3 = ?,
array(
$db->quote($val1),
$db->quote($val2),
$db->quote($val2),
$db->quote($val1),
$db->quote($val3))));但是我得到了同样的错误。如果我放入一个没有数组的参数,那么它会正确地进行替换,但是有了数组,它就不起作用了。如何像这样绑定多个参数?
发布于 2015-02-04 06:28:06
只需使用IN并将问号放在括号中...示例:
$productIds = array(1, 2, 3);
$select = $db->select()
->from('products',
array('product_id', 'product_name', 'price'))
->where('product_id IN (?)', $productIds);发布于 2014-03-22 03:51:56
你不需要引用你的变量,ZF会帮你解决这个问题:
$mytbl->fetchAll(
"(col1 LIKE ? AND col2 LIKE ?)
OR (col1 LIKE ? AND col2 LIKE ?))
AND col3 = ?",
array($val1, $val2, $val3, $val4, $val5));https://stackoverflow.com/questions/22565410
复制相似问题