用于PDO的WHERE IN子句的绑定参数

我的代码:

$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的计数,但是当我跳过参数化并且只是将variables本身添加到它的位置时,我得到一个准确的计数。 这里发生了什么?

你不能像这样绑定一个IN子句的参数。 $ myArraystring将只计为一个值,如果你这样做:

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

即使有三个以逗号分隔的值,数据库也只能将它们读取为一个string值。

您需要手动插入IN列表到老式的查询方式。

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

不幸的是没有其他办法。 至less现在。

我知道这个问题是古老的,但这对我有用:

 $arrayOfValues = array(1,2,3,4,5); $questionMarks = join(",", array_pad(array(), count($arrayOfValues), "?")); $stmt = $dbh->prepare("update some_table set end_date = today where value_no in ($questionMarks)"); $stmt->execute($arrayOfValues); 

为什么不使用这个解决scheme?

https://stackoverflow.com/a/39353278/1834212

它分析一组数值,它们是绑定占位符和它的元素的对,在IN的情况下,你只需要提供一个数组,然后它将parsing数组,并使用飞,然后喂那些数组的值