WHERE IN子句与PDO的绑定参数

时间:2011-08-12 17:43:48

标签: php mysql pdo

我的代码:

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

3 个答案:

答案 0 :(得分:10)

您不能像这样绑定IN子句的参数。 $ myArray字符串只计为一个值,就像你这样做:

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

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

您需要手动将IN列表插入到查询中,即老派方式。

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

遗憾的是没有别的办法。至少现在。

答案 1 :(得分:6)

我知道这个问题已经过时了,但这对我有用:

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

答案 2 :(得分:0)

为什么不使用此解决方案?

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

它解析一组值,这些值是绑定占位符及其元素对,在IN的情况下,您只需要提供一个数组,然后它将解析数组并使用绑定名称为您修改字符串动态生成,然后提供数组的值