PHP MySQLi フェッチ配列関数をループする
MySQLi フェッチ関数は、データベースサーバーからのデータにアクセスするために使用されます。データをフェッチした後、MySQLi
クエリを反復処理することもできます。
この記事では、mysqli_fetch_array()
関数の使用法と、アクセスされたデータを反復処理する方法について説明します。
この拡張機能は PHP バージョン 5.0.0 で導入され、設計の目的は MySQL バージョン 4.1.13 以降で動作することです。このチュートリアルでは、PHP バージョン 7.4.1 と phpMyAdmin を使用しています。
XAMPP は公式ウェブサイトからダウンロードできます。(XAMPP を使用している場合は、MySQL と PHP を別々にインストールする必要はありません)。
mysqli_fetch_array()
関数の反復
mysqli_fetch_array()
は、最初のパラメーターとして $result
を使用してデータベースから現在の行のデータを取得し、連想配列、数値配列、またはその両方として出力を保存するために使用されます(2 番目のパラメーターによって異なります)。現在、学生のデータベースには次のデータがあります。
MYSQLI_NUM
モードを使用した mysqli_fetch_array()
関数
mysqli_fetch_array()
関数を使用して、db_students
という名前の学生のデータベースからデータを読み取る次のプログラムを作成してみましょう。次のコードはデータベースに接続し、失敗した場合は失敗メッセージを表示します。
データベースとの接続が成功すると、mysqli_query
関数を使用してレコードが読み取られ、$result
変数に保存されます。mysqli_fetch_array()
は、その結果変数と MYSQLI_NUM
(mysqli_fetch_row()
関数のように動作します)をパラメーターとして受け取り、現在の行をインデックスが 0
から n-1
までの数字の配列として表示します。
サンプルコード:
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "db_students";
$connection = mysqli_connect($host, $username, $password, $database);
if (mysqli_connect_errno()) {
echo "Database connection failed.";
}
$sql = "SELECT * FROM tb_students";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_array($result,MYSQLI_NUM);
print_r($row)
?>
出力:
MYSQLI_ASSOC
モードを使用した mysqli_fetch_array()
関数
ここで、mysqli_fetch_array()
関数はパラメータ MYSQLI_ASSOC
により mysqli_fetch_assoc()
のように動作し、テーブルの列名は配列のインデックスとして表示されます。次のコードを練習して、出力を観察します。
サンプルコード:
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "db_students";
$connection = mysqli_connect($host, $username, $password, $database);
if (mysqli_connect_errno()) {
echo "Database connection failed.";
}
$sql = "SELECT * FROM tb_students";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
print_r($row)
?>
出力:
MYSQLI_BOTH
モードを使用した mysqli_fetch_array()
関数
パラメータ MYSQLI_BOTH
を指定して mysqli_fetch_array()
関数を使用すると、列名と列インデックスを使用してアクセスできる配列にデータが格納されます。次のコードを練習して、出力を確認してください。
サンプルコード:
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "db_students";
$connection = mysqli_connect($host, $username, $password, $database);
if (mysqli_connect_errno()) {
echo "Database connection failed.";
}
$sql = "SELECT * FROM tb_students";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_array($result,MYSQLI_BOTH);
print_r($row)
?>
出力:
ループオーバーmysqli_fetch_array()
関数
次のコードを使用して、mysqli_query
を反復処理し、出力を生徒のテーブルレコードと比較します。
mysqli_fetch_array()
、MYSQLI_ASSOC
、MYSQLI_NUM
、および MYSQLI_BOTH
のすべてのモードをループできることに注意してください。mysqli_fetch_array()
を使用している間は、パラメータとして渡す必要があります。
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "db_students";
$connection = mysqli_connect($host, $username, $password, $database);
if (mysqli_connect_errno()) {
echo "Database connection failed.";
}
$sql = "SELECT * FROM tb_students";
$result = mysqli_query($connection, $sql);
$std_num=0;
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
echo "Student Number ".$std_num."<br>";
echo "ID: ".$row['ID']."<br>";
echo "First Name: ".$row['FIRST_NAME']."<br>";
echo "Last Name: ".$row['LAST_NAME']."<br>";
echo "Age: ".$row['AGE']."<br>";
echo "<br><br>";
$std_num++;
}
?>
出力:
ID
、FIRST_NAME
、LAST_NAME
、AGE
を確認して、tb_students
という名前の次のテーブルと比較できます。
まとめ
上記の説明では、mysqli_fetch_array()
関数がデータベースからデータを取得するのに役立つと結論付けました。
ニーズと要件に応じて、列インデックスまたは列名、あるいはその両方を介して値にアクセスするかどうかにかかわらず、その出力モードを使用できます。次に、結果をループして、テーブルの各レコードを確認できます。