ホームページ  >  記事  >  データベース  >  PHP MySQLi 「コマンドが同期していません」: エラーを修正する方法

PHP MySQLi 「コマンドが同期していません」: エラーを修正する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-22 10:38:12481ブラウズ

PHP MySQLi

PHP コマンドが同期していない: ジレンマを解決する

PHP および MySQLi を使用して MySQL データベースからデータを取得する場合、準備された複数のコマンドを実行するステートメントを実行すると、「コマンドが同期していないため、コマンドを実行できません」というエラーが発生する場合があります。 "

原因と解決策

このエラーは、接続オブジェクト ($mysqli) に前のクエリからの保留中の結果がある場合に発生します。これを解決するには、準備された各ステートメントの後で $mysqli オブジェクトの next_result() 関数を呼び出す必要があります。

次の例を考えてみましょう:

$stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1");
$stmt->bind_param('s', $loweredEmail);
$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);
// This is where the error occurs
$stmt1->execute();

このコードでは、エラーは次のようになります。 2 番目のステートメント ($stmt1) の実行時にスローされます。これを修正するには、$stmt1 を実行する前に次の行を追加します。

$mysqli->next_result();

追加のヒント

  • 必ず free_result() と close( ) 各クエリの実行後に $stmt オブジェクトに追加されます。
  • それぞれに個別の $stmt オブジェクトを使用してください可能であれば、準備されたステートメント。
  • 上記の解決策を試した後でもエラーが発生する場合は、mysqli::more_results() および mysqli::next_result() を使用してバッファーに残っている保留中の結果を確認することを検討してください。

以上がPHP MySQLi 「コマンドが同期していません」: エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。