查看以下内容:
$idPlaceholders = implode(',', array_fill(0, count($ids), '?'));
$query = $db->prepare('
SELECT *
FROM sometable
WHERE
id IN(' . $idPlaceholders . ')
AND status IN ("open", "reopened")
');
$query->execute($ids);
当我运行它时,我收到以下错误:
PHP警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
如果我删除了AND status IN (...)
条款,它运行正常。我做错了什么?我认为PDO 会忽略硬编码值。
注意,我有三重检查和“?”的数量匹配id的数量。
$ids
数组是一个索引数组(这里是var_dump):
array 3
0 => int 23
1 => int 45
2 => int 67
呈现的查询如下所示:
SELECT *
FROM mytable
WHERE
id IN (?,?,?)
AND status IN ("open", "reopened")
答案 0 :(得分:0)
回答这个问题,以便从打开的问题列表中删除它。不删除,因为我不想被禁止。
我正在使用的应用程序扩展了PDO并添加了一个功能来自动扩展IN子句中的占位符(例如IN (:ids)
)。事实证明,如果你按照我在问题中概述的方式进行操作就会中断。
答案 1 :(得分:-2)
你可以尝试一下吗?
$idPlaceholders = implode(',', array_fill(0, count($ids), '?'));
$query = $db->prepare('
SELECT *
FROM sometable
WHERE
id IN(' . $idPlaceholders . ')
AND status IN (?, ?)
');
$ids[]="open";
$ids[]="reopened";
$query->execute($ids);