mysqli_fetch_assoc一次只取一行,适合逐行处理;mysqli_fetch_all一次性加载全部结果,适合小数据量且需多次访问的场景。
mysqli_fetch_assoc 每次调用只返回结果集中的下一行数据,以关联数组形式(键为字段名),指针自动后移。它不一次性加载全部数据到内存,对大数据量更友好。
常见错误是误以为调用一次就能拿到所有行,实际必须配合 while 循环使用:
$result = $mysqli->query("SELECT id, name FROM users");
while ($row = $result->fetch_assoc()) {
echo $row['id'] . ': ' . $row['name'] . "\n";
}注意点:
fetch_assoc 返回 false 表示已无更多行,不能直接 var_dump 整个结果集break 或 return,后续行不会被读取,但结果集仍占用资源,建议显式 $result->free()
data_seek(0) 后再用 fetch_assoc 重来(除非重新执行查询)mysqli_fetch_all 一次性把整个结果集读入 PHP 数组,返回值结构取决于第二个参数:MYSQLI_ASSOC 得关联数组,MYSQLI_NUM 得数字索引,不传参默认是 MYSQLI_BOTH(含两套键)。
典型用法:
$result = $mysqli->query("SELECT id, name FROM users");
$all = $result->fetch_all(MYSQLI_ASSOC); // 注意:不是 MYSQLI_ASSOC(),是常量
// $all 是 array[0]['id'], array[0]['name'], .
..
foreach ($all as $row) {
echo $row['id'] . ': ' . $row['name'] . "\n";
}关键区别与风险:
$all 不影响原始 $result,但也不能再用 fetch_assoc 继续读fetch_all 返回空数组 [],不是 false;而 fetch_assoc 在无数据时返回 false,类型判断要区分核心看数据规模和使用模式:
fetch_assoc + while
fetch_all(MYSQLI_ASSOC)
fetch_all 拿全表再 array_slice——应直接在 SQL 用 LIMIT 和 OFFSET
fetch(PDO::FETCH_ASSOC) 和 fetchAll(PDO::FETCH_ASSOC),行为逻辑一致,只是 API 不同很多人忽略前置校验:mysqli_query 失败时返回 false,此时调用任何 fetch_* 方法都会触发警告(“Trying to get property 'fetch_assoc' of non-object”之类)。
务必检查:
$result = $mysqli->query("SELECT * FROM users");
if ($result === false) {
die('Query failed: ' . $mysqli->error);
}
// 然后再调 fetch_assoc 或 fetch_all另外注意:
mysqli_error($mysqli) 和 $mysqli->error 等价,但后者更常用mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT),失败会直接抛异常,这时不用手动判 false,但需用 try/catch
fetch_all 对空结果集返回 [],但若 $result 本身是 false,调用它会报致命错误实际写的时候,多数列表页用 fetch_assoc 更稳;只有确认数据极小、且真需要数组形态时,才换 fetch_all。别为了少写几行循环,把内存和可维护性搭进去。
# mysql
# php
# 大数据
# csv
# ai
# 区别
# 内存占用
# sql
# Object
# 常量
# 关联数组
# while
# try
# Error
# mysqli
# pdo
# break
# 循环
# 指针
# Property
# 的是
# 什么时候
# 再用
# 会报
# 加载
# 就能
# 很多人
# 遍历
# 开了
# 用了
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】
如何在JavaScript中动态拼接PHP的base_url与jQuery变量
如何使用Golang实现文件追加操作_向已有文件追加数据
Win11怎么关闭搜索历史_Win11清除设备上的搜索历史记录
PHP接收参数值为空怎么办_判断和处理空参数方法说明【说明】
如何在 Go 中判断变量是否为函数类型
Win11 C盘满了怎么清理 Win11磁盘清理和存储感知使用教程【新手必看】
Win11怎么更改电脑名称_Windows 11修改计算机名操作指南【步骤】
Win11怎么开启远程桌面_Win11系统远程桌面启用开关
Win10怎样安装Excel数据分析工具_Win10安装分析工具包步骤【教程】
Windows10无法识别USB设备描述符请求失败_通用串行总线控制器修复
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】
PHP主流架构怎么部署到Docker_容器化流程【操作】
Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】
Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】
Win10怎样设置多显示器_Win10多显示器扩展设置【攻略】
Windows怎样关闭桌面弹窗广告_Windows关闭桌面弹窗设置【教程】
Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】
Python文本编码与解码_跨平台解析说明【指导】
php删除数据怎么清空表_truncate与delete区别及用法【汇总】
如何在 Pandas 中按元素交集合并两列字符串
c++ namespace命名空间用法_c++避免命名冲突
Windows7怎么找回经典开始菜单_Windows7经典菜单找回步骤【方法】
Win11怎么设置屏保时间_调整Win11屏幕保护等待时间【详解】
Windows10如何更改鼠标灵敏度_Win10鼠标属性指针选项调节
如何在Golang中编写异步函数测试_Golang异步操作测试策略
windows 10专注助手怎么关闭_windows 10禁用通知提醒功能方法
Python深度学习实战教程_神经网络模型构建与训练
Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程
Win10怎么设置开机密码_Windows10账户登录密码设置与取消
php会话怎么开启_session_start函数的作用与使用时机【方法】
Win11麦克风没声音怎么设置_Win11麦克风权限及驱动修复【教程】
Windows10如何查看保存的WiFi密码_Win10命令行netsh wlan查询
php485在php5.6下能用吗_php485旧版本兼容性问题说明【详解】
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
Python lxml的etree和ElementTree有什么区别
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Win11怎么设置组合键快捷方式_Windows11自定义快捷键操作
mac怎么分屏_MAC双屏显示与分屏操作技巧【指南】
Python 模块的 __name__ 属性如何由导入方式决定?
php485能和物联网模块通信吗_php485对接NB-IoT模块实例【说明】
Win11蓝牙开关不见了怎么办_Win11蓝牙驱动丢失修复教程【方法】
c++中如何使用虚函数实现多态_c++多态性实现原理
如何在Golang中优化文件读写性能_使用缓冲和并发处理
Win10 BitLocker加密教程 Win10给磁盘驱动器上锁【安全】
Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录
2026-01-04
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。