9

我正在运行多个删除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;
    }
}

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

4

3 回答 3

10

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

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

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

于 2011-02-02T13:46:46.060 回答
10

这帮助我删除了“命令不同步”错误:

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

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

于 2014-02-13T12:36:45.187 回答
0

Seva 的代码很可能会解决您的问题,如果您像我一样使用程序风格,请使用此

do {
  if ($result = mysqli_store_result($connect)) {
    mysqli_free_result($result);
  }
} while (mysqli_next_result($connect));
于 2017-08-12T07:16:10.120 回答