Я следующий код:Одновременные mysqli_stmt подготовлены запросы
<ol>
<?php
$db = mysqli_connect("host","login","pass","dbase");
$stmt = $db->prepare("SELECT id,name FROM table1 WHERE faculty=?");
$stmt->bind_param("d",$fac);
$stmt->execute();
$stmt->bind_result($id,$name);
while($stmt->fetch())
{
echo "<li>$name:<ul>";
$stmt2 = $db->prepare("SELECT mac,ip FROM table2 WHERE uid=?");
$stmt2->bind_param("d",$id);
$stmt2->execute();
$stmt2->bind_result($mac,$ip);
while($stmt2->fetch())
{
echo "<li>$mac ($ip)</li>";
}
echo "</ul></li>";
}
?>
</ol>
Я получаю ошибку Commands out of sync; you can't run this command now
. Я знаю, что я не могу сразу запустить несколько запросов, но я прочитал, что могу использовать $stmt->store_result()
. Проблема в том, что это не помогает в моем случае (я пробовал называть его сразу после $stmt->execute()
). Как я могу заставить мой код работать? Возможно ли это сделать без хранения результатов первого запроса в массиве?
Почему не только сделать один запрос с соединением? – Steve
@Steve это один из способов сделать это, но я хотел знать, есть ли еще более простая возможность, так как мой фактический код и второй запрос намного сложнее и переписывают их, чтобы иметь один длинный запрос и фрагмент кода, разделяющий результаты в группы (как в этом примере) было бы настоящей болью в шее ... – burtek
Более простая возможность * - правильно выполнить запрос, а не пытаться заставить PHP сгибаться таким образом. Другой способ - закрыть соединение с базой данных каждый раз, когда вы выполняете запрос. –