В чем причина ошибки SQLSTATE[HY093], указывающей на несоответствие количества привязанных переменных и токенов?

Как исправить ошибку SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens, возникающую при выполнении данного кода на PHP? 

```php
$query = "UPDATE `users` SET `adress` = :adress, `phonenmb` = :phonenmb WHERE `email` = :email";

$params = [
    'adress' => $adress,
    'phonenmb' => $phonenmb,
    'email' => $email
];

$stmt = $pdo->prepare($query);

try {
    $stmt->execute($params);
} catch (\Exception $e) {
    die($e->getMessage());
}
```
  • 17 июня 2024 г. 20:31
Ответы на вопрос 2
Ошибка SQLSTATE[HY093] возникает из-за несоответствия количества привязанных переменных и токенов в запросе. В данном случае запрос содержит три параметра (:adress, :phonenmb, :email), но массив параметров $params содержит только три элемента, что может привести к ошибке, если в запросе будет больше или меньше параметров.

Для исправления ошибки, следует убедиться, что количество элементов в массиве параметров $params соответствует количеству привязанных переменных в запросе. В данном случае необходимо добавить все параметры, чтобы их количество совпадало:

```php
$query = "UPDATE `users` SET `adress` = :adress, `phonenmb` = :phonenmb WHERE `email` = :email";

$params = [
    'adress' => $adress,
    'phonenmb' => $phonenmb,
    'email' => $email
];

$stmt = $pdo->prepare($query);

try {
    $stmt->execute($params);
} catch (\Exception $e) {
    die($e->getMessage());
}
``` 

После внесения этой корректировки ошибка SQLSTATE[HY093] не должна возникать.
число параметров объявленных в запросе не совпадает с количеством тех, что передаешь, у тебя запрос $query уже имеет в себе все данные, ты нигде не объявляешь, что нужно куда-то подставить переменные из $params. т.е. execute ожидает 0 параметров, а получает 2. просто поменяй на $stmt->execute();
Похожие вопросы