繁体   English   中英

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

[英]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子句与参数化语句一起使用的方法,请参见此问题/答案。

我有一个整数数组,如何在mysql查询中使用每个整数(在php中)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM