Думаю, что многим приходилось натыкаться на грабли «Commands out of sync; you can't run this command now» при работе с PHP и MySQL. У нас такое происходило при попытке вызвать две хранимые процедуры подряд. Сегодня я нашёл решение этой проблемы (правда его наверняка можно доработать и сделать более красивым).
Считаем, что foo() принимает на вход tinyint и содержит «SELECT 1», а bar() не принимает на вход ничего и содержит «SELECT 2». $link содержит готовое соединение с базой (mysqli).
$link->real_query('CALL foo(1)');
do {
$res = $link->use_result();
if (!empty($res)) {
while ($row = $res->fetch_row()) {
print_r($row);
echo '<br />';
}
$res->close();
} else {
echo 'empty<br />';
}
} while ($link->next_result());
echo '<hr />';
$link->real_query('CALL bar()');
do {
$res = $link->use_result();
if (!empty($res)) {
while ($row = $res->fetch_row()) {
print_r($row);
echo '<br />';
}
$res->close();
} else {
echo 'empty<br />';
}
} while ($link->next_result());
Обязательным является только текст комментария. Он не может превышать 4кБ. Остальные поля служат для обратной связи. Имя всё же рекомендуется указать.