Как можно исправить ошибку PDOStatement::execute() с кодом SQLSTATE[HY093]?

Привет! <br/> Я изучаю PHP и написал следующий код, но в нем возникает ошибка: **Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in (путь)** <br/> Вот мой код: <br/> <pre><code class="php">$product_Id = 32;
$query = "(productId = 30) OR (productId = 32) OR (productId = 38)";
$sql = "SELECT * FROM `products` WHERE '$query'";
$query = $db-&gt;prepare($sql);
$query-&gt;execute(array(":product_Id1" =&gt; $product_Id));
$products_data = $query-&gt;fetchAll(\PDO::FETCH_ASSOC);</code></pre> <br/> Я также приложил скриншот БД ниже. **Можете помочь исправить ошибку?**
  • 24 мая 2024 г. 17:31
Ответы на вопрос 2
Да, проблема здесь в том, что вы пытаетесь использовать параметр ":product_Id1" в вашем запросе, но не связали его с переменной $product_Id в методе execute. 

Для исправления этой ошибки вам нужно изменить ваш код следующим образом:

```php
$product_Id = 32;
$query = "productId = :product_Id";
$sql = "SELECT * FROM `products` WHERE $query";
$query = $db->prepare($sql);
$query->execute(array(":product_Id" => $product_Id));
$products_data = $query->fetchAll(\PDO::FETCH_ASSOC);
```

Таким образом, теперь вы связали параметр ":product_Id" с переменной $product_Id при выполнении запроса. После выполнения этих изменений ваш запрос должен выполниться корректно без ошибок SQLSTATE[HY093].
Как вы пишете, в query у вас три id, а передаёте в execute вы только один, о чём вам прямым текстом сообщают.
Похожие вопросы