@danchiksux
Говнокодер

Почему не работает одно подготовленное выражение внутри другого?

Есть у меня подготовленное выражения и не могу выполнять другие пока не закрою его. Мне нужно выполнить выражение внутри этого.
<?php
		$sql_sale_item = 'SELECT `id`,`name`,`price`,`old_price`,`img` FROM `shops` WHERE `sale` > 0';
		$stmt_sale = $connection->prepare($sql_sale_item);
		$stmt_sale->execute();
		$stmt_sale->bind_result($id, $name, $price, $old_price, $img);
		while ($stmt_sale->fetch()):
// Тут я вывожу данные и тут мне нужно выполнить ещё один запрос...
<?php endwhile; $stmt_sale->close();?>

Запрос который нужно выпустить?
$raiting_check_sql = 'SELECT AVG(`assessment`) FROM `assessments` WHERE `product_id` = ?';
$raiting_check = $connection->prepare($raiting_check_sql);
$raiting_check->bind_param('i', $id);
$raiting_check->execute();
$raiting_check->bind_result($assessments);
$raiting_check->fetch();
$raiting_check->close();

Ошибка:

Fatal error
: Uncaught Error: Call to a member function bind_param() on boolean in D:\OSPanel\domains\localhost\pages\index.php:27 Stack trace: #0 D:\OSPanel\domains\localhost\index.php(73): include() #1 {main} thrown in
D:\OSPanel\domains\localhost\pages\index.php
on line
27
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что в том же соединении нельзя открыть второй запрос, пока не закрыт курсор первого запроса.
Можно принудительно выбрать все строки в буфер через mysqli_store_result, тогда первый запрос будет считаться завершённым.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
Потому что не работает.
Если схема принципиальна - откройте ещё одно соединение.

Если нет - я бы в 2 запроса собрал данные. А если нагрузки нет - так вообще одним, с джойном.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы