MySQL_FETCH_ARRAY関数は、結果セットからアレイとして列に並んでおり、デフォルトでアソシエーションとインデックスの両方を含む配列を返します。
$result = mysql_query("SELECT * FROM users");
while ($row = mysql_fetch_array($result)) {
print_r($row);
}
ここでは、 $ rowは各ループで得られるレコードであり、タイプは配列です。
mysql_fetch_arrayからレコードを取得すると、通常、このデータのすべてのフィールドを繰り返すためにforeachを使用します。
while ($row = mysql_fetch_array($result)) {
foreach ($row as $key => $value) {
echo "$key => $value<br>";
}
}
$ row自体は配列であるため、これは正しいです。
MySQL_FETCH_ARRAYは単一のレコードを返し、結果リソースをクエリするために直接使用できないことに注意してください。
foreach ($result as $row) {
// 間違った使用法,$resultそれはリソースです,配列ではありません
}
この書き込み方法は間違っており、エラーが発生します。
すべてのレコードをトラバースするためにForeachを使用したい場合、一般的な慣行は、すべての結果を最初に配列に読み取り、次にトラバースすることです。
$rows = [];
while ($row = mysql_fetch_array($result)) {
$rows[] = $row;
}
foreach ($rows as $record) {
// 各レコードを処理します
echo $record['username'] . "<br>";
}
このようにして、すべてのレコードをforeachで簡単に処理できます。
デフォルトでmysql_fetch_arrayによって返される配列には、数値インデックスと関連するインデックスの両方があり、その結果、データの冗長性が生じます。連想配列のみを取得することをお勧めします:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// $row連想配列のみが含まれています
}
このように、配列はよりシンプルで、 foreachトラバーサルがより便利です。
<?php
// データベースに接続します
$link = mysql_connect("gitbox.net", "username", "password");
mysql_select_db("testdb", $link);
// クエリデータ
$result = mysql_query("SELECT id, username, email FROM users");
// すべてのデータを読み取ります
$rows = [];
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$rows[] = $row;
}
// 使用foreachすべてのレコードを繰り返します
foreach ($rows as $record) {
echo "ユーザーID: " . $record['id'] . "<br>";
echo "ユーザー名: " . $record['username'] . "<br>";
echo "郵便: " . $record['email'] . "<br><hr>";
}
// 接続を閉じます
mysql_close($link);
?>