"Команды не синхронизированы; вы не можете запустить эту команду сейчас" - вызвано mysqli::multi_query
Я запускаю несколько удалений через 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 ответа
Это помогло мне удалить ошибку "Команды не синхронизированы":
do {
$mysqli_conn_obj->use_result();
}while( $mysqli_conn_obj->more_results() && $mysqli_conn_obj->next_result() );
Добавьте этот код сразу после вызова multi_query, он будет использовать результирующие наборы и устранит ошибку.
Используя mysqli::multi_query, вы запускаете запросы, но вам нужно обработать результаты этих запросов, прежде чем двигаться дальше. Страница документации описывает различные способы обработки результатов. После обработки вы сможете нормально выполнять другие запросы.
Сообщение об ошибке, с которым вы сталкиваетесь, на самом деле объясняется немного лучше на странице для mysqli::query (хотя имейте в виду, что mysqli::query не будет возвращать объект результата в этом случае, так как вы делаете удаление).
Конечно, вы можете изменить multi_query на несколько отдельных запросов, я не знаю, каковы плюсы и минусы каждого подхода.
Код Seva, скорее всего, решит вашу проблему, если вы используете процедурный стиль, как я, используйте это
do {
if ($result = mysqli_store_result($connect)) {
mysqli_free_result($result);
}
} while (mysqli_next_result($connect));