"命令不同步;您现在无法运行此命令" - 由mysqli :: multi_query引起

and*_*rew 9 mysqli multi-query

我通过mysqli :: multi_query运行多个删除,它正在弄乱下一行查询.抛出以下错误.

 Error - SQLSTATE HY000. 
 Sql error: Commands out of sync; you can't run this command now
Run Code Online (Sandbox Code Playgroud)

我是否需要以某种方式清除多重查询,以便它不会弄乱我的下一个查询?这个错误的原因是什么?

这就是我运行多重查询的方式

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

我在Windows 7上使用最新版本的Xampp

ZoF*_*reX 10

通过使用mysqli :: multi_query,您将触发查询,但在继续之前需要处理这些查询的结果.该文档页面描述的处理结果的各种方式.处理完毕后,您将能够很好地执行其他查询.

您遇到的错误消息实际上在mysqli :: query的页面上解释得更好(尽管请记住,mysqli :: query在此实例中不会返回结果对象,因为您正在执行删除操作).

您当然可以将multi_query更改为多个单个查询,我不知道每种方法的优缺点是什么.

  • 类似于......`do {$ mysqli-> use_result(); } while($ mysqli-> next_result())` (8认同)
  • 那么如何清除查询,因为我没有得到任何返回.你还没有告诉我任何我不知道的事情. (3认同)

小智 10

这有助于我删除"命令不同步"错误:

do { 
    $mysqli_conn_obj->use_result(); 
}while( $mysqli_conn_obj->more_results() && $mysqli_conn_obj->next_result() );
Run Code Online (Sandbox Code Playgroud)

在调用multi_query之后添加此代码,它将使用结果集并解决错误.