将 WHERE IN 子句与 PDO 绑定参数

2022-08-31 01:05:09

我的代码:

$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,但是当我跳过参数化,只需将变量本身添加到其位置时,我就会得到准确的计数。这是怎么回事?


答案 1

不能像这样绑定 IN 子句的参数。$myArray字符串将仅计为一个值,就像您执行以下操作一样:

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

即使有三个逗号分隔的值,数据库也会将它们仅作为一个字符串值读取。

您需要手动将IN列表插入查询中,这是老式的方式。

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

不幸的是,没有其他办法。至少现在是这样。


答案 2

我知道这个问题很老了,但这对我有用:

$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);

推荐