Блог

Commands out of sync

16 Сентября 2008, 00:00

Думаю, что многим приходилось натыкаться на грабли «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());

Добавить комментарий

Комментарии

28.01.2010, 16:58, Baster.
Отлично! Спасибо, ваш метод помог.
Только два момента: тут пара опечаток - echo print_r и отсутствие ;
и if после отработки результата в while все равно печатает empty
Ответ:

Ну да, точно :) Просто это я кусок рабочего кода взял и заменил некоторые строки уже здесь, оставив только наглядные куски.

А while скорее всего печатает empty, потому что там do-while цикл. Давно дело было, сейчас уже не вспомню, почему я так решил. Тут ведь главное было найти принцип, как от ошибки избавиться :)