Нет способа отловить все ошибки, посмотрите пример, который вы используете (здесь )
В этом примере содержатся только операторы "select", что не характерно для сценариев с несколькими операторами.
Если вы поставите «вставить», «обновить», «удалить» или хотя бы «установить» - это будет работать по-другому.
"multi_query" - возвращает FALSE, если первый оператор не выполнен. ПЕРВЫЕ ЗАЯВЛЕНИЯ - это все, что мы можем контролировать. Все последующие утверждения являются загадкой. Если это не оператор "select" - он выдаст ошибку "$ mysqli-> store_result ();" и мы никогда не узнаем, успешно это или нет.
НО
Если ваш SQL-скрипт будет находиться в «START TRANSACTION; ... commit;» обертка, вы можете быть уверены - если что-то не получается, все не получается. Это хорошо, это помогает нам увидеть, «все ли не так».
Чтобы сделать это, просто добавьте в конце сценария «вставить - обновить» немного «выбрать», если последний оператор возвращает данные - весь сценарий успешно завершен.
Использовать SQL как:
START TRANSACTION;
set @q=1;
select "success" as response from dual;
commit;
Функция PHP:
function last_of_multi_query ($mysqli, $query) {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); //After that all mysql errors will be transferred into PHP exceptions.
$mysqli->multi_query($query);
do { null; } while($mysqli->next_result());
$result = $mysqli->store_result();
if (!$result){
throw new Exception('multi_query failed');
}
return $result;
}// end function