Invalid parameter number: number of bound variables does not match number of tokens
В принципе, ошибка сама по себе простая. Давайте разберем ее подробно:
"number of tokens" - это количество токенов (т.е. плейсхолдеров,
?
или :name
) в подготовленном запросе. "number of variables bound" - количество переменных, которые мы привязали к запросу, либо через
bindValue
или bindParam
, либо отправили прямиком в execute
(что технически то же самое). "does not match number of tokens" - количество токенов не совпадает с количеством переменных!
Получается, эта ошибка возникает, когда PDO пытается привязать к запросу больше переменных, чем в нем было определено плейсхолдеров.
К примеру, возьмем запрос, в который вообще не используются плейсхолдеры, но мы пытаемся привязать к нему переменную:
$stmt = $db->prepare('SELECT * FROM objects o WHERE o.object_id = 1');
$stmt->execute(array($id));
и мы получим эту самую ошибку, поскольку количество переданных в запрос переменных (1) не совпадает с количеством плейсхолдеров (0).
Соответственно, чтобы решить эту проблему, надо тщательно пересчитать все плейсхолдеры и соответствующие им переменные. Также надо помнить, что плейсхолдеры нельзя брать в кавычки - такой плейсхолдер ПДО не засчитает, и выдаст ту же самую ошибку.
Написать комментарий
Пожалуйста, воздержитесь от посылки спама.
Сообщения, содержащие гиперссылки, проходят премодерацию.