PHP コマンドの同期エラー: 原因と解決策
PHP および MySQLi を使用してプリペアド ステートメントを使用してデータベースからデータを取得する場合、 「コマンドが同期していないため、現在コマンドを実行できません」というエラーが発生する場合があります。この問題は通常、同じ PHP スクリプト内で複数のプリペアド ステートメントを実行しようとしたときに発生します。
このエラーは、MySQLi の query() メソッドを MYSQLI_USE_RESULT オプションとともに使用すると、後続の呼び出しが「古い」状態のままになるために発生します。これを解決するには、次のステートメントに進む前に最初のステートメントの結果の処理を適切に終了することが重要です。
解決策の 1 つは、各結果セットを取得した後に mysqli_free_result() を呼び出すことです。この関数はバッファから保留中の結果を解放し、後続のステートメントが正常に実行できるようにします。
もう 1 つの効果的なアプローチは、mysqli::next_result() を使用することです。各準備されたステートメントを実行した後、 next_result() を呼び出して MySQLi 内の内部ポインターを進め、次のステートメントの適切な同期を確保します。これは、ストアド プロシージャまたは複数の結果セットを操作する場合に特に関係します。
next_result() の使用例を次に示します。
<?php $mysqli = new mysqli('localhost', 'user', 'password', 'database'); // Prepare and execute first statement $stmt1 = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt1->bind_param('s', $username); $stmt1->execute(); $stmt1->store_result(); // Free the result set and advance to the next result $stmt1->free_result(); $mysqli->next_result(); // Prepare and execute second statement $stmt2 = $mysqli->prepare("SELECT * FROM orders WHERE user_id = ?"); $stmt2->bind_param('i', $userId); $stmt2->execute(); $stmt2->store_result(); // Bind results and fetch data $stmt2->bind_result($orderId, $productId, $quantity); while ($stmt2->fetch()) { // Do something with the fetched data } $stmt2->free_result(); $mysqli->close(); ?>
これらの戦略を実装すると、「コマンドが同期していません」エラーを解決し、PHP スクリプト内の複数の準備されたステートメントのスムーズな実行を保証します。
以上がMySQLi プリペアドステートメント使用時の PHP 「コマンドが同期していません」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。