用于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数组,并使用飞,然后喂那些数组的值