在使用 PHP 连接 MySQL 数据库时,获取查询结果的方式多种多样,其中 mysql_fetch_array 和 mysql_fetch_row 是两个常用的函数。它们都能从查询结果中获取一行数据,但返回的数据结构和适用场景有所不同。本文将详细讲解这两个函数的区别及它们各自的应用场景。
mysql_fetch_array()
该函数从结果集中取得一行作为关联数组、数字索引数组,或者二者兼有的数组返回。它的默认行为是返回包含数字索引和关联索引的数组。
语法示例:
$row = mysql_fetch_array($result, MYSQL_BOTH);
第二个参数可以是:
MYSQL_ASSOC:只返回关联数组
MYSQL_NUM:只返回数字索引数组
MYSQL_BOTH(默认):同时返回关联和数字索引数组
mysql_fetch_row()
该函数从结果集中取得一行作为数字索引数组返回。也就是说,结果只能通过数字索引访问,不能用字段名访问。
语法示例:
$row = mysql_fetch_row($result);
特性 | mysql_fetch_array | mysql_fetch_row |
---|---|---|
返回值类型 | 默认返回数字索引+关联索引的数组(可选) | 返回数字索引数组 |
访问方式 | 可用字段名或数字索引访问 | 只能用数字索引访问 |
内存消耗 | 较大(因返回数组包含两种索引) | 较小 |
灵活性 | 高,适合需要同时用数字索引和关联索引的场景 | 低,只适合数字索引访问 |
适合于需要灵活访问字段的场景,例如:
需要通过字段名访问数据,代码更具可读性
需要同时支持数字索引和字段名索引,兼容性更好
读取数据量较少,对内存占用要求不高
示例:
$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>";
}
适合于对内存要求严格,且只需数字索引访问的场景,例如:
批量读取大数据,节省内存空间
只按顺序处理字段数据,无需通过字段名访问
性能要求较高的简单数据处理
示例:
$result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_row($result)) {
echo "User ID: " . $row[0] . ", Name: " . $row[1] . "<br>";
}
函数 | 优点 | 缺点 |
---|---|---|
mysql_fetch_array | 访问灵活,代码可读性好 | 占用内存较多 |
mysql_fetch_row | 内存占用少,性能较好 | 只能数字索引访问,代码可读性较差 |
// 使用 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>";
}