docs для multi_query
говорят:
Возвращает FALSE, если первый оператор не сработал. Чтобы получить последующие ошибки из других операторов, вы должны сначала вызвать mysqli_next_result().
docs для next_result
говорят:
Возвращает TRUE при успешном завершении или FALSE при сбое.
Наконец, пример, размещенный в документах для multi_query
, использует возвращаемое значение из next_result
, чтобы определить, когда запросов больше нет; например для остановки цикла:
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* execute multi query */
if ($mysqli->multi_query($query)) {
do {
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result()); // <-- HERE!
}
/* close connection */
$mysqli->close();
?>
Я не знаю количество предоставленных запросов и не знаю ничего о SQL, который я собираюсь выполнить. Поэтому я не могу просто сравнить количество запросов с количеством возвращаемых результатов. Тем не менее, я хочу показать сообщение об ошибке пользователю, если, скажем, третий запрос был сломанным запросом. Но мне кажется, что у меня нет возможности определить, не удалось ли next_result
, потому что больше не было запросов для выполнения, или если это произошло из-за ошибки в синтаксисе SQL.
Как я могу проверить все запросы на ошибки?