我的代码:
$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();
始终显示计数为1,但是当我跳过参数化并只是将变量本身添加到其中时,我得到一个准确的计数.这里发生了什么?
解决方法:
您不能像这样绑定IN子句的参数. $myArray字符串只计为一个值,就像你这样做:
SELECT foo FROM bar WHERE ids IN ('1,2,3')
即使有三个逗号分隔值,数据库也只将它们作为一个字符串值读取.
您需要手动将IN列表插入到查询中,即旧式方式.
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
遗憾的是没有别的办法.至少现在(是.