首页  >  文章  >  数据库  >  将参数绑定到 WHERE IN 子句时,为什么 PDO 仅返回一行?

将参数绑定到 WHERE IN 子句时,为什么 PDO 仅返回一行?

DDD
DDD原创
2024-11-25 09:19:11780浏览

Why Does PDO Return Only One Row When Binding Parameters to a WHERE IN Clause?

使用 PDO 绑定 WHERE IN 子句参数

问题:

尝试使用以下方式将参数绑定到 WHERE IN 子句时PDO,结果计数始终为 1,这与手动插入未经参数化的值不同。造成这种差异的原因是什么?

代码:

$myArray = implode($myArray, ',');
$sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)');
$sth->bindParam(':ids', $myArray);
$sth->execute();
$result = $sth->fetch();
echo $sth->rowCount();

答案:

不幸的是,PHP 数据对象(PDO) 不支持直接绑定 IN 子句参数。 $myArray 数组被视为单个字符串,类似于以下 SQL:

SELECT foo FROM bar WHERE ids IN ('1,2,3')

尽管存在多个逗号分隔值,数据库仍将它们解释为一个字符串值。

为了实现所需的行为,必须将 IN 子句手动插入到查询中,如下所示:

'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'

不幸的是,有目前没有替代 PDO 的 IN 子句中的参数绑定机制。

以上是将参数绑定到 WHERE IN 子句时,为什么 PDO 仅返回一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn