проверьте следующее:PDO счетные зашиты В статье в качестве нуждающихся параметров
$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 warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Если удалить пункт AND status IN (...)
, он работает нормально. Я что-то не так? У меня создалось впечатление, что жестко закодированные значения игнорируются PDO.
Обратите внимание, что у меня есть тройной чек и число «?» соответствует количеству идентификаторов.
$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")
Можете ли вы показать sql как создается после того, как переменная '$ idPlaceholders 'подстроена? – Ray
'var_dump ($ ids);' !! – Webinan
Может возникнуть проблема с индексами в ваших $ ids. Покажи нам свалку, пожалуйста. Или попробуйте применить 'sort()' к ним перед 'execute()'. –