Каждый раз, когда вы используете mysqli_multi_query()
, вам нужно выполнить блокировку l oop после него, потому что эта функция отправляет SQL запросов, которые будут выполняться MySQL асинхронно. Пример блокировки l oop, который ожидает, пока MySQL обработает все запросы асинхронно, выглядит следующим образом:
$mysqli->multi_query(/* ... */);
do {
$result = $mysqli->use_result();
if ($result) {
// process the results here
$result->free();
}
} while ($mysqli->next_result()); // Next result will block and wait for next query to finish
$mysqli->store_result(); // Needed to fetch the error as exception
Использование mysqli_multi_query()
в ваш код PHP. В 99,99% случаев есть более эффективные способы достичь того, чего вы хотите. У этой функции так много недостатков, что ее следует избегать любой ценой.
Вам нужны транзакции с базой данных. Если ваши запросы зависят друг от друга, вам нужно отключить неявную фиксацию и зафиксировать, когда все они будут успешно выполнены. Вы не можете добиться этого с помощью mysqli_multi_query()
.