问题:
尝试使用以下方式将参数绑定到 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中文网其他相关文章!