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