Оказалось, что крайне полезный метод clear_multiresult($result), о котором было написано здесь, не работает.
Поиск проблемы был трудный и интересный. Не могу не написать об этом.
Как известно (из документации), метод $mysqli->multi_query() создает в процессе выполнения набор результатов по одному для каждого запроса, входящего в мультизапрос.
Для того, чтобы эти запросы вытаскивать на свет Божий и обрабатывать существуют 3 замечательных метода:
А как же проверять тот факт, что результаты кончились? Конечно методом $mysqli->more_results(). Он для этого и создан.Поиск проблемы был трудный и интересный. Не могу не написать об этом.
Как известно (из документации), метод $mysqli->multi_query() создает в процессе выполнения набор результатов по одному для каждого запроса, входящего в мультизапрос.
Для того, чтобы эти запросы вытаскивать на свет Божий и обрабатывать существуют 3 замечательных метода:
- $mysqli->store_result()
- $mysqli->next_result()
- $mysqli->more_results()
Кому интересны подробности - прошу обратиться к документации.
Скажу только, что загвоздка оказалась в методе $mysqli->next_result().
Предположим, у нас есть мультизапрос, состоящий из 4-х запросов. Причем в третьем запросе ошибка. Тогда мы будем действовать следующим образом.
- Выполним $mysqli->store_result(). Этим мы вытащим из недр API результат первого запроса.
- Обработали результат и удалили его.
- Выполняем подготовку второго запроса методом $mysqli->next_result(). При этом метод вернет TRUE, что и ожидалось.
- Выполним $mysqli->store_result(). Этим мы вытащим из недр API результат второго запроса.
- Обработали результат и удалили его.
- Выполняем подготовку третьего запроса методом $mysqli->next_result(). При этом метод вернет FALSE, что абсолютно не ожидалось. При этом в документации черным по белому написано, что метод возвращает истину, если метод выполнился удачно, и ложь, если операция потерпела неудачу. Какая же тут неудача? Все вполне удачно, поскольку если не обращать внимания на возвращаемое значение метода, ошибочный результат все-таки подготавливается и можно двигаться дальше, то есть проверять на ошибки и тд и тп.
- Не обращаем внимания на возвращаемое значение и выполняем $mysqli->store_result(). Этим мы вытащим из недр API результат второго запроса.
- Обработали результат, то есть проверили его на ошибки, выявили ошибку и выполнили my_exit();