在 PHP 中使用 PDO 访问数据库时,执行查询之后如何把结果取出来是开发中最常遇到的问题。PDO 不仅在安全性上比旧式 mysql 函数好,还提供了非常灵活的結果获取接口。理解这些获取方式,能让你在处理单条记录、列表数据或自定义对象时更加高效。

PDO 查询结果的主要获取方式
PDOStatement 对象提供了多个方法来读取数据,最常用的是 fetch、fetchAll 和 fetchColumn。它们配合设置好的提取模式,可以返回数组、对象或特定格式。
1. 使用 fetch 逐条获取
fetch 每次调用返回下一行结果,适合处理大结果集或只需单条记录的场景。
<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users');
// 默认返回关联加索引数组,可指定模式
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['id'] . ':' . $row['name'] . "n";
}
?>
2. 使用 fetchAll 一次获取全部
fetchAll 把结果集一次性读入数组,适合数据量不大、需要整体处理的情形。
<?php
$stmt = $pdo->query('SELECT id, name FROM users');
$list = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($list as $item) {
echo $item['name'] . "n";
}
?>
3. 使用 fetchColumn 取单列
当你只关心第一列的值,比如统计数量,可以用 fetchColumn。
<?php
$stmt = $pdo->query('SELECT COUNT(*) FROM users');
$count = $stmt->fetchColumn();
echo '用户总数:' . $count;
?>
设置提取模式
除了在调用时传参数,也可以用 setFetchMode 固定模式。常见模式有 FETCH_ASSOC、FETCH_OBJ、FETCH_CLASS 等。
| 模式 | 说明 |
|---|---|
| FETCH_ASSOC | 返回字段名作键的关联数组 |
| FETCH_OBJ | 返回匿名对象,属性为字段名 |
| FETCH_CLASS | 映射到指定类的实例 |
映射为自定义对象
<?php
class User {
public $id;
public $name;
}
$stmt = $pdo->query('SELECT id, name FROM users');
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
while ($u = $stmt->fetch()) {
echo $u->name;
}
?>
小结
选择哪种获取方式取决于数据规模和后续用法。单条处理用 fetch,全量分析用 fetchAll,取单一值用 fetchColumn。合理设置提取模式可以让代码更简洁,也减少手动转换的成本。
PHPPDOfetch_mode修改时间:2026-07-26 18:15:10