Проблемы SELECT после вызова процедуры MySQL на php

После MySQL запроса, в котором происходит обращение к хранимой процедуре из PHP:

CALL procedureName()

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

Error «Commands out of sync; you can't run this command now» number «2014» in query: …

Это происходит тогда, когда процедура возвращает результат в виде таблицы, а не единичный результат (число или строка, или boolean).

Если хранимая процедура возвращает таблицу, то помимо таблицы выдаётся также ещё одно значение — результат выполнения самой процедуры. Такое поведение mysql драйвера называется множественный результат. Большинство разработчиков забирает первый и чаще всего единственный результат. В случае же, когда процедура возвращает таблицу, вторичный результат тоже надо вытянуть, иначе буфер результатов останется неочищенным и остальные запросы не пройдут — не смогут туда написать.

Сбросить ненужные результаты, вытащив их из буфера при использования объектов PDO, можно командой closeCursor():

$STH = $DBH->query("CALL procedureName ()");
while($row->fetch()) {

	#обработка данных 
}
$STH->closeCursor();

При использовании MySQLI объекта, используйте команду store_result():

//$connection — ваш MySQLI объект
while($connection->next_result()) {

	#обработка данных 
}
$connection->store_result();