/ / pdo підрахування жорстко закодованого речення IN як необхідних параметрів - php, pdo

pdo підрахунок твердо закодованого речення як необхідних параметрів - php, 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: PDOStatement :: execute (): SQLSTATE [HY093]: Недійсний номер параметра: кількість прив'язаних змінних не відповідає кількості маркерів

Якщо я видалити AND status IN (...) пункт, він працює нормально. Я щось роблю не так? У мене було таке враження закодовані значення ігноруються PDO.

Зверніть увагу, у мене є потрійна перевірка та кількість "?" відповідають кількості ідентифікаторів.

The $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 для відповіді № 1

Відповідаючи на це, щоб вилучити його з відкритих списків запитань. Не видаляти, оскільки я не хочу отримувати заборону.

Додаток, який я використовую, розширює PDO і додає функцію для автоматичного розширення заповнювача в реченні IN (наприклад IN (:ids)). Виявляється, це зламається, якщо ви зробите це так, як я зазначив у своєму питанні.


-2 для відповіді № 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);