ホームページ > データベース > mysql チュートリアル > MySQLi の「コマンドが同期していない」エラーを解決するにはどうすればよいですか?

MySQLi の「コマンドが同期していない」エラーを解決するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-13 02:34:11
オリジナル
302 人が閲覧しました

How to Resolve the MySQLi

MySQLi の「コマンドが同期していない」エラー: 包括的な説明

MySQLi は、新しいコマンドを実行すると「コマンドが同期していない」エラーをスローします。以前のクエリからの未読の行がまだ残っている間にクエリが試行されました。 query.

エラーの理由

MySQL クライアント プロトコルでは、新しいクエリを実行する前に、クエリのすべての結果がフェッチされる必要があります。これにより、結果セットの処理の一貫性が確保され、データ損失が防止されます。

ソリューション

mysqli_store_result() または mysqli_result::fetch_all():

次を使用して外部クエリからすべての行をプリフェッチします。 mysqli_store_result() するか、mysqli_result::fetch_all() を使用して結果セット全体を配列としてフェッチします。これにより、結果がクライアントにバッファリングされ、複数のクエリを実行できるようになります。

ストアド プロシージャと mysqli_multi_query():

ストアド プロシージャは複数の結果セットを返すことができます。これを処理するには、mysqli_multi_query() を使用し、すべての結果セットが処理されるまで mysqli_next_result() を使用して結果を繰り返し処理します。

コード スニペット

これは、質問のコードを使用して、 mysqli_store_result():

$result = mysqli_query($db, $sql) or exit(mysqli_error($db));

if ($result) {
    $result->store_result(); // Buffer the result set
    echo "<table border='1'>
        <tr><th>id</th>
        <th>name</th>
        <th>parent_id</th>
        <th>parent_name</th>
        <th>level</th>
        <th>email</th></tr>";

    while ($row = mysqli_fetch_assoc($result)) {
        $aid = $row["id"];
        $sql2 = "SELECT * FROM members WHERE MEMNO = '$aid'";
        $result2 = mysqli_query($db, $sql2) or exit(mysqli_error($db));

        if ($result = mysqli_fetch_assoc($result2)) {
            $fname = $ newArray['FNAME'];
            $lname = $newArray['LNAME'];
            $mi = $newArray['MI'];
            $address = $newArray['ADDRESS'];
            $city = $newArray['CITY'];
            $state = $newArray['STATE'];
            $zip = $newArray['ZIP'];
            $kdate = $newArray['KDATE'];
            $date = abs(strtotime(date('m/d/Y')) - strtotime(date($kdate))) / (60 * 60 * 24);
        }

        echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
        $row["id"],$row["name"],
        $row["parent_id"],$row["parent_name"],
        $row["level"],$row["email"]);
    }

    echo "</table>";
}
mysqli_free_result($result);
mysqli_close($db);
ログイン後にコピー

可能な設計改善

リレーショナル データベースに階層データを格納すると、複雑なクエリが発生する可能性があります。データの保存と取得を簡素化するために、ネストされたセットや隣接リストなどの代替モデルの使用を検討してください。

以上がMySQLi の「コマンドが同期していない」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート