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 :
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);
?>