以下是PHP中mysqli_fetch系列四种常用查询函数(mysqli_fetch_array、mysqli_fetch_assoc、mysqli_fetch_row、mysqli_fetch_object)的比较表。该表基于搜索结果总结,涵盖返回类型、索引方式、参数、性能特点及适用场景等关键方面,帮助开发者快速选择合适函数。
补充说明
性能对比:
mysqli_fetch_row通常最快(仅数字索引),mysqli_fetch_object稍慢(需实例化对象),而mysqli_fetch_array和mysqli_fetch_assoc居中。优先选择最简索引方式以优化性能。结果集处理:所有函数逐行移动结果集指针,末尾返回
false(数组函数)或null(对象函数)。错误处理:查询失败时
mysqli_query返回false,需先验证结果集再调用fetch函数。推荐实践:
明确字段名时用
mysqli_fetch_assoc(简洁高效)。需混合索引时用
mysqli_fetch_array(参数控制)。面向对象代码用
mysqli_fetch_object。高性能批量处理用
mysqli_fetch_row。
此表综合了函数的核心差异,实际选择应结合查询需求和数据访问模式。
以下是PHP中四种mysqli_fetch函数的实例演示及输出效果对比,通过相同查询结果的不同处理方式直观展示差异:
<?php
// 连接数据库
$conn = new mysqli("localhost", "user", "password", "testdb");
if ($conn->connect_error) die("连接失败: " . $conn->connect_error);
// 示例数据表结构:users(id INT, name VARCHAR(50), age INT)
$sql = "SELECT id, name FROM users LIMIT 1";
$result = $conn->query($sql);
echo "====== 原始数据 ======<br>";
echo "表结构: users(id=1, name='张三')<br><br>";
// 1. mysqli_fetch_array
$row_array = $result->fetch_array(MYSQLI_BOTH);
echo "1. fetch_array(MYSQLI_BOTH):<br>";
print_r($row_array);
// 输出: Array ( [0] => 1 [id] => 1 [1] => 张三 [name] => 张三 )
// 重置指针
$result->data_seek(0);
// 2. mysqli_fetch_assoc
$row_assoc = $result->fetch_assoc();
echo "<br><br>2. fetch_assoc():<br>";
print_r($row_assoc);
// 输出: Array ( [id] => 1 [name] => 张三 )
// 重置指针
$result->data_seek(0);
// 3. mysqli_fetch_row
$row_row = $result->fetch_row();
echo "<br><br>3. fetch_row():<br>";
print_r($row_row);
// 输出: Array ( [0] => 1 [1] => 张三 )
// 重置指针
$result->data_seek(0);
// 4. mysqli_fetch_object
$row_obj = $result->fetch_object();
echo "<br><br>4. fetch_object():<br>";
var_dump($row_obj);
// 输出: object(stdClass)#2 (2) { ["id"]=> int(1) ["name"]=> string(6) "张三" }
$conn->close();
?>输出效果说明:
fetch_array同时包含数字索引和字段名索引(
MYSQLI_BOTH模式)可通过
$row[0]或$row['id']访问相同数据
fetch_assoc仅含字段名作为键的关联数组
必须使用
$row['id']形式访问
fetch_row仅含数字索引数组(从0开始)
必须使用
$row[0]形式访问
fetch_object返回
stdClass对象,字段作为属性需通过
$row->id形式访问
该演示通过同一查询结果展示四种函数的数据结构差异,实际开发中可根据访问方式需求选择合适函数
