当前位置: 首页> 最新文章列表> mysql_fetch_array 和 foreach 循环的结合使用方法

mysql_fetch_array 和 foreach 循环的结合使用方法

gitbox 2025-05-29

1. mysql_fetch_array的基本用法

mysql_fetch_array函数从结果集中取得一行作为数组返回,默认返回同时包含关联和索引的数组:

$result = mysql_query("SELECT * FROM users");
while ($row = mysql_fetch_array($result)) {
    print_r($row);
}

这里的$row是每次循环取得的一条记录,类型是数组。

2. foreach遍历单条记录的数组

当你从mysql_fetch_array中得到一条记录时,通常会用foreach遍历这一条数据的所有字段:

while ($row = mysql_fetch_array($result)) {
    foreach ($row as $key => $value) {
        echo "$key => $value<br>";
    }
}

这种写法是对的,因为$row本身是数组。

3. 不能直接对查询结果用foreach

注意,mysql_fetch_array返回的是单条记录,不能直接对查询结果资源使用foreach

foreach ($result as $row) {
    // 错误用法,$result是资源,不是数组
}

这种写法是错误的,会导致报错。

4. 正确结合方式:先用while循环读取所有数据到数组,再用foreach遍历

如果想用foreach遍历所有记录,常用做法是先将结果全部读取到一个数组,然后遍历:

$rows = [];
while ($row = mysql_fetch_array($result)) {
    $rows[] = $row;
}

foreach ($rows as $record) {
    // 处理每条记录
    echo $record['username'] . "<br>";
}

这样,你就可以在foreach中方便地处理所有记录。

5. 使用MYSQL_ASSOC避免数据冗余

默认mysql_fetch_array返回的数组既有数字索引,也有关联索引,造成数据冗余。建议只取关联数组:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    // $row只包含关联数组
}

这样,数组更简洁,foreach遍历更方便。

6. 示例完整代码

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