Как мне дождаться разрешения mysqli_multi_query? - PullRequest
0 голосов
/ 02 августа 2020

Предположим, у меня есть такой код:

mysqli_multi_query('<first query>');
include_once 'secondQuery.php';

Это огромное упрощение, и, надеюсь, я не упростил ошибку, но secondQuery.php полагается на <first query> для завершения по порядку правильно выполнить. Когда я запускаю их вручную в правильном порядке, все работает отлично. Но когда я запускаю это, получаемая мной ошибка согласуется с тем, что они выполняются либо в неправильном порядке, либо одновременно.

Как мне написать среднюю строку:

mysqli_multi_query('<first query>');
wait for mysqli_multi_query to conclude;
include_once 'secondQuery.php';

правильно PHP синтаксис?

1 Ответ

0 голосов
/ 02 августа 2020

Каждый раз, когда вы используете 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...