PHP中将数据库查询结果转数组最常用MySQLi的fetch_assoc()或PDO的fetch(PDO::FETCH_ASSOC);MySQLi支持单行处理和fetch_all(MYSQLI_ASSOC)批量获取,PDO推荐fetchAll(PDO::FETCH_ASSOC),需注意空结果判断、字段名兼容性及大结果集内存风险。

PHP中把数据库查询结果对象转成数组,最常用的是 fetch_assoc()(关联数组)、fetch_array()(含数字和关联键)或 fetch_all(MYSQLI_ASSOC)(一次性取全部)。关键看你是用 MySQLi 还是 PDO,下面按主流方式分点说明。
MySQLi 面向对象方式:单行转关联数组
适合逐行处理,内存友好:
$mysqli = new mysqli("localhost", "user", "pass", "db");
$result = $mysqli->query("SELECT id, name, email FROM users WHERE status = 1");
<p>while ($row = $result->fetch_assoc()) {
// $row 是关联数组,如 ['id' => 1, 'name' => '张三', 'email' => 'zhang@example.com']
echo $row['name'] . "\n";
}</p>MySQLi 一次性获取全部结果为关联数组
适合数据量不大、需整体操作的场景:
$result = $mysqli->query("SELECT * FROM posts ORDER BY created_at DESC");
$posts = $result->fetch_all(MYSQLI_ASSOC); // 直接得到二维关联数组
<p>// $posts 示例:
// [
// ['id'=>1, 'title'=>'PHP入门', 'content'=>'...'],
// ['id'=>2, 'title'=>'MySQL优化', 'content'=>'...']
// ]</p>PDO 方式:更灵活、支持多种数据库
推荐使用 fetch(PDO::FETCH_ASSOC) 或 fetchAll(PDO::FETCH_ASSOC):
$pdo = new PDO("mysql:host=localhost;dbname=db", "user", "pass");
$stmt = $pdo->query("SELECT id, username FROM admins");
<p>// 单行
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}</p><p>// 全部(返回二维关联数组)
$admins = $stmt->fetchAll(PDO::FETCH_ASSOC);</p>注意点与常见坑
-
别混用 fetch_* 方法:比如先调了
fetch_row()再调fetch_assoc(),内部指针已移动,可能跳过数据 -
检查查询是否成功:
$result或$stmt为空时直接调用 fetch 会报错,建议加判断 -
中文字段名兼容性:如果表字段含中文或特殊符号,用
FETCH_NUM更稳妥,或统一用英文字段名 -
大结果集慎用 fetch_all:几万行数据用
fetch_all()可能爆内存,优先用 while 循环逐行处理
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











