Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Хранимые процедуры MySQL и "out of sync"


Автор: smartov 6.3.2008, 21:04
Сегодня очень долго выяснял причину, почему, после того, как я делаю MySQL запрос, в котором обращаюсь к хранимой процедуре (stored procedure) (MySQL 5+, mysqli driver)
Код
CALL procedureName()

то следующий за ним любой запрос не выполняется, а mysqli_error возвращает ошибку 
Код

Error "Commands out of sync; you can't run this command now" number "2014" in query:...

Судя по ошибке, создавалось впечатление, что утеряно соединение. Это и ввело в заблуждение и повело по ложному пути.

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

SELECT * FROM users;

Вследствие этого, запрос к MySQL базе получает в ответ <strong>множественный результат</strong>. И если "первый" результат я вытягиваю (как для обычного запроса), то "второй", который представляет из себя (bool)false - нет, и он остается в буффере.

В общем, чтобы избежать подобных проблем, после того, как вытащите первый результат (обычным для любого MySQL запроса способом), сбросьте ненужные, вытащив их из буффера результатов следующим образом:
Код

//Предположим что $connection - это ваш MySQLI объект
while ($connection->next_result()) $connection->store_result();


Огромное спасибо человеку под ником Evert, который оборвал мои долгие поиски http://www.rooftopsolutions.nl/article/173 на этот вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)