我想准备一个循环中使用的语句。当我尝试执行该语句时,我在日志中看到一个错误,提示“无效的参数编号:没有参数被绑定”。zend框架:如何编写和执行WHERE IN子句?
我的代码有什么问题?
$itemSelectSql = "SELECT * FROM `tblItems` WHERE `itemID` IN (?)";
$itemSelectStmt = new Zend_Db_Statement_Mysqli($this->db_ro, $itemSelectSql);
while() {
...
$itemIds = array();
// populate $itemIds array
...
$itemSelectStmt->execute(array($itemIds));
}
编辑:
我想我可能有一个错误在我成立这解释了为什么不管我尝试失败。我看到的是:
PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback,
class 'PDOStatement' does not have a method 'bind_param' in
/var/www/lib/Zend/Db/Statement/Mysqli.php on line 204
编辑:
我用错了适配器。应该是Zend_Db_Statement_Pdo :-)
感谢您的答复。
Paul,用生成多个'?'(如@cwallenpoole建议)和使用'FIND_IN_SET()'(我建议)来测试性能。尽管我在回答中注意到“*我不确定它是否对性能有任何影响*”,但并不意味着“*它可能具有负面影响*”。事实上,如果MySQL缓存语句(使用'FIND_IN_SET()',你总是会有相同的语句,而多个'?'语句会有所不同),如果'FIND_IN_SET'的strlist参数()'只针对查询而不是针对每一行进行解析。 – binaryLV 2011-06-10 13:33:50
对不起,我已经走了另一个解决方案,因为我更熟悉它,需要破解。不过谢谢。 – 2011-06-10 14:40:21
Paul,我看了'explain'的输出,看起来'find_in_set()'不能使用索引,所以“其他解决方案”可能会更好。 – binaryLV 2011-06-10 14:46:25