「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 複数の準備されたステートメントを実行するときに PHP/MySQLi で発生する「コマンドが同期していません」エラーを解決する方法は?

複数の準備されたステートメントを実行するときに PHP/MySQLi で発生する「コマンドが同期していません」エラーを解決する方法は?

2024 年 11 月 8 日に公開
ブラウズ:804

How to Resolve the \

PHP コマンドの同期エラー

PHP/MySQLi で複数のプリペアド ステートメントを実行すると、「コマンドが同期していません」というエラーが発生する可能性があります。同期中、現在コマンドを実行できません」というエラーが発生します。この問題は、前の結果データがバッファ内に未処理のまま残っているときに、後続のステートメントを実行しようとすると発生します。

この問題を修正するには、次のステートメントを実行する前に、mysqli_free_result() 関数を使用して、保存されている結果データを明示的に解放することが不可欠です。声明。さらに、各ステートメントの実行後に mysqli オブジェクトの next_result() 関数を呼び出して、内部ポインターを次の結果セットに進めることが重要です。

特定のコード例では、エラーは次の実行中に発生します。 $stmt1 は、$stmt からの結果がクリアされないためです。 mysqli_free_result($stmt) を明示的に呼び出し、続いて $mysqli->next_result() を呼び出すことで、バッファが空になり、ポインタが次のステートメントに向けてリセットされるようにすることができます。

変更されたコード例:

    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
    $stmt->fetch();

    $stmt->free_result();
    $stmt->close();

    while ($mysqli->more_results()) {
        $mysqli->next_result();
    }

    $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
    $stmt1->bind_param('s', $user_id);
    $stmt1->execute();
    $stmt1->store_result();
    $stmt1->bind_result($privileges);
    $stmt1->fetch();

    $stmt1->free_result();
    $stmt1->close();

これらの修正を実装すると、「コマンドが同期していない」エラーが解消され、後続のプリペアド ステートメントがシームレスに実行できるようになります。

リリースステートメント この記事は次の場所に転載されています: 1729135816 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3