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 に答える