如何使用Zend_Db_Adapter_Mysqli :: fetchAll()查询“IN”WHERE子句?

时间:2011-01-07 10:06:21

标签: php zend-framework mysqli

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(),但我只是得到一个错误。

我做错了什么?

4 个答案:

答案 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)?