MySQLを使用する場合、複数のSQLクエリを実行して複数の結果セットを一度に取得する場合があります。 PHPでは、 MySQLI拡張機能を使用している場合は、 Multi_Query()メソッドを使用して複数のクエリを一度に実行し、次にこれらの結果セットをnext_result()とmysqli_fetch_assoc()を1つずつ処理できます。
以下に、このプロセスを例で示します。
ユーザーと注文の2つのテーブルを備えたデータベースがあるとします。両方のテーブルのコンテンツを同時に照会したいと考えています。
<?php
// データベース接続を作成します
$mysqli = new mysqli("localhost", "username", "password", "database");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// 複数の行を構築しますSQL声明
$sql = "SELECT id, name FROM users;";
$sql .= "SELECT id, user_id, total FROM orders;";
// 使用multi_query()执行多条声明
if ($mysqli->multi_query($sql)) {
do {
// 使用store_result()現在の結果セットを取得します
if ($result = $mysqli->store_result()) {
// 現在の結果セットを繰り返します
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free(); // 現在の結果セットリソースをリリースします
}
// 次の結果セットがある場合,続く
} while ($mysqli->more_results() && $mysqli->next_result());
} else {
echo "クエリエラー: " . $mysqli->error;
}
// データベース接続を閉じます
$mysqli->close();
?>
この関数を使用すると、単一のリクエストで複数のSQLステートメントを実行できます。これは、クエリのバッチ実行やリクエストの数の削減に非常に役立ちます。
この関数は、現在の結果セットを取得し、 fetch_assoc()と一緒にLineごとに読み取るために使用されます。
結果セットの行を連想配列として返し、ループ内のデータを抽出するのに適しています。
この関数は、次の結果セットを準備するために使用されます。現在の結果セットを処理した後、次の結果セットを入力するために呼び出される必要があります。
結果セットが処理されるたびに、 free()を使用してリソースを解放してください。
SQL注射の問題を防ぐように注意してください。クエリステートメントにユーザー入力が含まれる場合は、必ず前処理ステートメントを使用してください。
more_results()をチェックして、処理する結果セットが増えていることを確認してください。
いくつかのシナリオでは、 multi_query() + next_result()を使用できます。
バックエンドレポートは複数のテーブルをクエリします
ストアドプロシージャを実行して、複数の結果セットを返します
パフォーマンスを最適化し、データベースの相互作用を削減します
multi_query()とnext_result()およびmysqli_fetch_assoc()を組み合わせることにより、複数の結果セットを優雅に処理し、プログラムの効率とコードのシンプルさを改善できます。
上記のように、エンタープライズアプリケーションを開発している場合、または独自のサービスを構築している場合でも、これらの機能の使用を習得すると、データベースをより効率的に操作できます。
コンテンツについて詳しく知りたい場合は、より実用的なチュートリアルと資料については、 https ://gitbox.netにアクセスしてください。