您好!欢迎访问家园网-www.jy.wang!

家园网

php的mysqli_fentch四种查询函数的比较,结合实例

网络 作者:本站 点击:

以下是PHP中mysqli_fetch系列四种常用查询函数(mysqli_fetch_arraymysqli_fetch_assocmysqli_fetch_rowmysqli_fetch_object)的比较表。该表基于搜索结果总结,涵盖返回类型、索引方式、参数、性能特点及适用场景等关键方面,帮助开发者快速选择合适函数。

函数名返回类型索引方式参数使用示例主要特点与适用场景
mysqli_fetch_array数组可选:关联数组、数字索引数组或两者兼有(默认)result_typeMYSQLI_BOTH(默认)、MYSQLI_ASSOCMYSQLI_NUM$row = $result->fetch_array(); echo $row['name'] . $row[0];灵活性高,但可能冗余;可通过参数控制返回格式,适合需同时访问字段名和数字索引的场景。
mysqli_fetch_assoc数组仅关联数组(字段名作为键)$row = $result->fetch_assoc(); echo $row['name'];返回纯关联数组,代码可读性好;性能优于mysqli_fetch_array(无多余索引),适合需明确字段名的查询。
mysqli_fetch_row数组仅数字索引数组(按查询字段顺序)$row = $result->fetch_row(); echo $row[0];高效轻量(仅数字索引);适用于字段顺序固定或不关心字段名的场景,如快速导出数据。
mysqli_fetch_object对象属性访问(字段名作为属性)$row = $result->fetch_object(); echo $row->name;面向对象风格;需通过->访问属性,适合集成到类或需链式操作的场景,但创建对象稍慢。

360截图20250805103445388.jpg

补充说明

  • 性能对比‌:mysqli_fetch_row通常最快(仅数字索引),mysqli_fetch_object稍慢(需实例化对象),而mysqli_fetch_arraymysqli_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();
?>

输出效果说明:

  1. fetch_array

    • 同时包含数字索引和字段名索引(MYSQLI_BOTH模式)

    • 可通过$row[0]$row['id']访问相同数据

  2. fetch_assoc

    • 仅含字段名作为键的关联数组

    • 必须使用$row['id']形式访问

  3. fetch_row

    • 仅含数字索引数组(从0开始)

    • 必须使用$row[0]形式访问

  4. fetch_object

    • 返回stdClass对象,字段作为属性

    • 需通过$row->id形式访问

该演示通过同一查询结果展示四种函数的数据结构差异,实际开发中可根据访问方式需求选择合适函数


标签: