如何使用Zend_Db_Adapter_Mysqli :: fetchAll()中的“IN”WHERE子句进行查询?
我遇到了一个奇怪的问题Zend_Db_Adapter_Mysqli
。我需要从我的数据库通过ID查询多个项目,所以我有以下SQL,如何使用Zend_Db_Adapter_Mysqli :: fetchAll()中的“IN”WHERE子句进行查询?
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()
,但我只是得到一个错误。
我在做什么错?
我不知道是否有帮助,但这里有一个如何使用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会接受这个。
我看到了,但是我们不能使用它,因为我们使用了“SELECT SQL_CACHE”,而你无法使用Zend_Db_Select。 – 2011-01-07 10:22:18
事实上,你只有一个结果是由于MySQL解释字符串'1,2,3'
为1
。你会明确地有三个问号添加到查询:
$ids = array(1,2,3);
$sql = 'SELECT * FROM mytable WHERE id IN (?, ?, ?)';
$result = $adapter->fetchAll($sql, $ids);
你可以写,将改变$ids
以问号权数的函数。
看到这个问题/答案的方式使用带有参数化语句的IN子句。
I have an array of integers, how do I use each one in a mysql query (in php)?
这听起来像一个愚蠢的问题,但是否有实际上行与IDS 1,2,3你的数据库? :) – 2011-01-07 10:09:03
@Spiny Normal:是的。 – 2011-01-07 10:21:08