[英]How do you query using an “IN” WHERE clause with Zend_Db_Adapter_Mysqli::fetchAll()?
我在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()
,但是我只是报错。
我究竟做错了什么?
我不确定是否有帮助,但这是有关如何使用Zend_Db_Select进行操作的答案: 如何使用Zend_Db_Select 创建WHERE IN子句
编辑:
好的,如果它确实不起作用,并且您仍打算使用字符串,则不能这样做:
$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是否会接受。
没那么容易。 看到这里: http : //forums.mysql.com/read.php?45,64588,66133#msg-66133
由于MySQL将字符串'1,2,3'
为数字1
,因此您只能得到一个结果。 您将必须明确向查询添加三个问号:
$ids = array(1,2,3);
$sql = 'SELECT * FROM mytable WHERE id IN (?, ?, ?)';
$result = $adapter->fetchAll($sql, $ids);
您可以编写一个函数,将$ids
转换为正确数量的问号。
有关将IN子句与参数化语句一起使用的方法,请参见此问题/答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.