Intereting Posts
Функция «Пользователь вводит сообщение» …? PHP: запись в файл excel с использованием PEAR Выйти из системы в приложении Symfony 2, когда включена опция «запомнить меня» Как настроить иерархические маршруты отдыха Zend? Справка по регулярному выражению PHP Regex Можете ли вы получить доступ к модели из другой модели в CodeIgniter? Обнаружение переломов в руке с использованием обработки изображений Как создать форму PHP, которая подчиняется себе? PHP, cURL сообщение для входа в WordPress Как увеличить максимальное время выполнения в php Как я могу заполнить массив javascript значениями из базы данных с помощью PHP? Использовать файл чтения php () или перенаправить для отображения файла изображения? Как изменить размер изображения высокого разрешения с помощью PHP PHP Сохранение пути загрузки файла пользователя после завершения проверки Dirt-простые шаблоны PHP … может ли это работать без `eval`?

Вызов двух хранимых процедур в mysqli вызывает ошибку «Commands out of sync»

Контекст проблемы

Я относительно новичок в большинстве языков, над которыми я работаю, и постепенно возвращаюсь и улучшаю старый код. Я переписываю старый PHP и заменяю жестко запрограммированные SQL-запросы ( я знаю ) с вызовами хранимых процедур.

Код на моих страницах организован в следующем порядке:

$RESULT_one = $connection->query( ... my first query ... ); $RESULT_two = $connection->query( ... my second query ... ); if(isset($RESULT_one) & isset($RESULT_two)) { // Generate a form using the results from the queries // Loop through $RESULT_one to populate a combo box $RESULT_one->free(); // Loop through $RESULT_two to populate a combo box $RESULT_two->free(); } else { // Display an error to the user rather than displaying the form } 

проблема

После замены моего первого запроса и моего второго запроса на CALL s на хранимые процедуры, я получаю сообщение об ошибке #2014 - Commands out of sync; you can't run this command now #2014 - Commands out of sync; you can't run this command now .

Шаги, предпринятые для решения проблемы

  • Этот плакат с переполнением стека имел аналогичную проблему, и принятый ответ предполагает вызов next_result() который решает их проблему. Тем не менее , я хочу проверить, что оба вызова в базу данных были успешными, прежде чем генерировать мою форму, я не хочу ее генерировать наполовину.

  • Я вижу еще один вопрос, когда у искателя была такая же проблема, и кажется, что next_result() неизбежна, потому что «так работает mysqli» – почему это работает с «сырым» SQL, но не с хранимыми процедурами? В чем разница? Есть ли эффективный способ проверить, что оба запроса были успешными, прежде чем генерировать мою форму? Я хотел бы понять, что происходит и почему происходит изменение поведения.

  • Я наткнулся на документацию для mysqli_store_result() которая кажется чем-то потенциально полезной. Я читал комментарии для этой документации, но это совсем не ясно.

  • Похоже, решение состоит в вызове next_result() объекта mysqli между вызовами , как я узнал из этого вопроса о переполнении стека.

При вызове нескольких хранимых процедур команда ошибок Commands out of sync; you can't run this command now Commands out of sync; you can't run this command now могут произойти, если не предпринимаются шаги по ее предотвращению.

Один из способов – вызвать next_result() объекта mysqli после каждого вызова хранимой процедуры, как описано здесь .