Zend_Db_Adapter_Mysqli
我遇到了一个奇怪的问题。我需要从我的数据库中按ID查询多个项目,所以我有以下SQL,
SELECT * FROM mytable WHERE id IN (1,2,3)
此查询正常。
然后尝试使用Zend_Db_Adapter_Mysqli
,
$sql = 'SELECT * FROM mytable WHERE id IN (?)';
$ids = array(1,2,3);
$result = $adapter->fetchAll($sql, implode(',', $ids));
问题在于上面的PHP我只返回1个结果而不是预期的3.我试过传递$ids
而不是使用implode()
,但我只是得到一个错误。
我做错了什么?
答案 0 :(得分:1)
我不确定它是否有帮助,但是这里有一个关于如何使用Zend_Db_Select来做到这一点的答案:How to create WHERE IN clause with Zend_Db_Select
编辑:
好吧,如果它确实不起作用,并且你打算使用字符串,那么你不能这样做:
$ids = array(1,2,3);
$sql = sprintf('SELECT * FROM mytable WHERE id IN (%s)', implode(',' $ids));
$result = $adapter->fetchAll($sql);
:)
或者,甚至更精彩:
$ids = array(1,2,3);
$sql = sprintf('SELECT * FROM mytable WHERE id IN (%s)', implode(',' array_fill('?', count($ids)));
$result = $adapter->fetchAll($sql, $ids);
但是,我不确定fetchAll会接受这个。
答案 1 :(得分:0)
答案 2 :(得分:0)
由于MySQL将字符串'1,2,3'
解释为数字1
,因此您只得到一个结果。您将明确地向查询添加三个问号:
$ids = array(1,2,3);
$sql = 'SELECT * FROM mytable WHERE id IN (?, ?, ?)';
$result = $adapter->fetchAll($sql, $ids);
您可以编写一个将$ids
转换为正确数量的问号的函数。
答案 3 :(得分:0)
有关将IN子句与参数化语句一起使用的方法,请参阅此问题/答案。
I have an array of integers, how do I use each one in a mysql query (in php)?