当前位置: 首页> 最新文章列表> mysql_fetch_array 与 mysql_fetch_row 的区别与应用

mysql_fetch_array 与 mysql_fetch_row 的区别与应用

gitbox 2025-06-03

在使用 PHP 连接 MySQL 数据库时,获取查询结果的方式多种多样,其中 mysql_fetch_arraymysql_fetch_row 是两个常用的函数。它们都能从查询结果中获取一行数据,但返回的数据结构和适用场景有所不同。本文将详细讲解这两个函数的区别及它们各自的应用场景。


1. 函数简介

  • mysql_fetch_array()

    该函数从结果集中取得一行作为关联数组、数字索引数组,或者二者兼有的数组返回。它的默认行为是返回包含数字索引和关联索引的数组。

    语法示例:

    $row = mysql_fetch_array($result, MYSQL_BOTH);
    

    第二个参数可以是:

    • MYSQL_ASSOC:只返回关联数组

    • MYSQL_NUM:只返回数字索引数组

    • MYSQL_BOTH(默认):同时返回关联和数字索引数组

  • mysql_fetch_row()

    该函数从结果集中取得一行作为数字索引数组返回。也就是说,结果只能通过数字索引访问,不能用字段名访问。

    语法示例:

    $row = mysql_fetch_row($result);
    

2. 主要区别

特性mysql_fetch_arraymysql_fetch_row
返回值类型默认返回数字索引+关联索引的数组(可选)返回数字索引数组
访问方式可用字段名或数字索引访问只能用数字索引访问
内存消耗较大(因返回数组包含两种索引)较小
灵活性高,适合需要同时用数字索引和关联索引的场景低,只适合数字索引访问

3. 应用场景分析

mysql_fetch_array

适合于需要灵活访问字段的场景,例如:

  • 需要通过字段名访问数据,代码更具可读性

  • 需要同时支持数字索引和字段名索引,兼容性更好

  • 读取数据量较少,对内存占用要求不高

示例:

$result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "User ID: " . $row['id'] . ", Name: " . $row['name'] . "<br>";
}

mysql_fetch_row

适合于对内存要求严格,且只需数字索引访问的场景,例如:

  • 批量读取大数据,节省内存空间

  • 只按顺序处理字段数据,无需通过字段名访问

  • 性能要求较高的简单数据处理

示例:

$result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_row($result)) {
    echo "User ID: " . $row[0] . ", Name: " . $row[1] . "<br>";
}

4. 小结

函数优点缺点
mysql_fetch_array访问灵活,代码可读性好占用内存较多
mysql_fetch_row内存占用少,性能较好只能数字索引访问,代码可读性较差

5. 代码示例总结

// 使用 mysql_fetch_array 获取关联数组
$result = mysql_query("SELECT id, username FROM users");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "ID: " . $row['id'] . ", Username: " . $row['username'] . "<br>";
}

// 使用 mysql_fetch_row 获取数字索引数组
$result = mysql_query("SELECT id, username FROM users");
while ($row = mysql_fetch_row($result)) {
    echo "ID: " . $row[0] . ", Username: " . $row[1] . "<br>";
}

6. 注意事项

  • mysql_* 系列函数已被废弃,建议使用 mysqliPDO 扩展替代。

  • 在新项目中应避免使用这些过时函数,保证代码的安全性和可维护性。