«Команды не синхронизированы; вы не можете запустить эту команду сейчас» - вызвано mysqli :: multi_query - PullRequest
9 голосов
/ 26 января 2011

Я выполняю несколько удалений через mysqli :: multi_query, и он испортил следующий запрос в строке. Выдается следующая ошибка.

 Error - SQLSTATE HY000. 
 Sql error: Commands out of sync; you can't run this command now

Нужно ли как-нибудь очистить мультизапрос, чтобы он не мешал моему следующему запросу? В чем причина этой ошибки?

И вот как я запускаю свой мультизапрос

function deleteSomeTables($args){
    $sql = 'delete 1;delete another;';
   if($database->multi_query($sql)){
    return true;
    }else{
    return false;
    }
}

Я использую последнюю версию Xampp для Windows 7

Ответы [ 3 ]

10 голосов
/ 13 февраля 2014

Это помогло мне удалить ошибку «Команды не синхронизированы»:

do { 
    $mysqli_conn_obj->use_result(); 
}while( $mysqli_conn_obj->more_results() && $mysqli_conn_obj->next_result() );

Добавьте этот код сразу после вызова multi_query, он будет использовать результирующие наборы и устранит ошибку.

10 голосов
/ 02 февраля 2011

Используя mysqli :: multi_query , вы запускаете запросы, но вам нужно обработать результаты этих запросов, прежде чем двигаться дальше.Страница документации описывает различные способы обработки результатов.После обработки вы сможете нормально выполнять другие запросы.

Сообщение об ошибке, с которым вы сталкиваетесь, на странице объясняется немного лучше для mysqli :: query (хотя имейте в виду,этот mysqli :: query не будет возвращать объект результата в этом случае, так как вы делаете удаление).

Конечно, вы можете изменить multi_query на несколько отдельных запросов, я не знаю, какие плюсы / минусыкаждого подхода.

0 голосов
/ 12 августа 2017

Код Севы, скорее всего, решит вашу проблему, если вы используете процедурный стиль, как я, используйте этот

do {
  if ($result = mysqli_store_result($connect)) {
    mysqli_free_result($result);
  }
} while (mysqli_next_result($connect));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...