PHPでは、(MySQL改善された拡張機能)拡張機能を使用してデータベースに接続してクエリを実行する場合、 MySQLI_Query()のようなクエリ関数を実行すると、Queryが結果セット( SELECTクエリなど)を返す場合、 MySQLI_RESULTオブジェクトを取得します。
このmysqli_resultオブジェクトは、クエリ結果を操作するためのインターフェイスであり、それを通じて、ラインごとにクエリおよびフィールドごとに返されたデータを読み取ることができます。
mysqli_resultは、オブジェクト指向の両方のスタイルと手続き型スタイルの両方に存在する結果セットオブジェクトです。データベースクエリによって返されるすべての行と列データが含まれていますが、これらのデータのすべてを一度にメモリにロードするわけではありませんが、さまざまな方法でオンデマンドでフェッチする必要があります。
データを取得する一般的な方法は次のとおりです。
fetch_assoc() →連想配列の行を取得します
fetch_row() →行のインデックス配列を取得します
fetch_object() →オブジェクトの行を取得します
fetch_array() →連想配列、インデックスアレイ、またはその両方(設定可能)のいずれかの行を取得します
この記事では、fetch_array()に焦点を当てています。
fetch_array()はmysqli_resultの方法であり、現在の結果セットで一連のデータを取得するために使用され、返品フォームは配列です。
呼び出しには2つのスタイルがあります。
オブジェクト指向のスタイル:
$result = $mysqli->query("SELECT id, name FROM users");
$row = $result->fetch_array();
プロセススタイル:
$result = mysqli_query($conn, "SELECT id, name FROM users");
$row = mysqli_fetch_array($result);
いずれにせよ、それ以上の行がなくなるまで呼び出すたびに1行が必要です(この時点でfalseを返します)。
fetch_array()は、返品配列のタイプを制御するオプションパラメーターを受信できます。
完全な署名:
array mysqli_fetch_array(mysqli_result $result, int $resulttype = MYSQLI_BOTH)
パラメーター$ resultType値は次のとおりです。
mysqli_assoc →returnのみ連想配列(鍵としてのフィールド名)
mysqli_num →番号インデックス配列のみを返します(フィールドインデックスが重要です)
mysqli_both (デフォルト)→Association +数値インデックス混合配列を返します
例えば:
$conn = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($conn, "SELECT id, name FROM users");
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
echo "ID: " . $row['id'] . " Name: " . $row['name'] . "<br>";
}
ここでは、 mysqli_assocを使用するため、 $ rowにはフィールド名キーのみがあり、数値インデックスはありません。
完全な例: