“Commands out of sync; you can't run this command now” - Caused by mysqli::multi_query

帅比萌擦擦* 提交于 2019-11-28 03:16:48

问题


I am running multiple deletes through mysqli::multi_query and it is messing up the next query in line.The following error is being thrown.

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

Do I need to somehow clear the multiquery so it doesn't mess with my next query? What is the cause of this error?

And this is how I am running my multiquery

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

I am using a recent version of Xampp on windows 7


回答1:


By using mysqli::multi_query you are firing off queries, but you need to handle the results of those queries before you move on. The documentation page describes the various ways of handling the results. Once handled, you will be able to perform other queries fine.

The error message you are encountering is actually explained a little better on the page for mysqli::query (although bear in mind that mysqli::query would not return a result object in this instance, as you are doing a delete).

You could of course change multi_query to multiple single queries, I don't know what the pros/cons of each approach are.




回答2:


This helped me to remove 'Commands out of sync' error:

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

Add this code just after calling multi_query, it will use the result sets and resolve the error.




回答3:


Seva's code will most likely fix your issue, if you're using procedural style like me, use this

do {
  if ($result = mysqli_store_result($connect)) {
    mysqli_free_result($result);
  }
} while (mysqli_next_result($connect));


来源:https://stackoverflow.com/questions/4801166/commands-out-of-sync-you-cant-run-this-command-now-caused-by-mysqlimulti

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!