PHP PDO fetch()用法详解(附带实例)
使用 query() 方法执行 SQL 语句后,返回的结果是 PDOStatement 类对象。通过 PDOStatement 类对象可以对结果集进行处理,常用的处理结果集的方法有 fetch()、fetchColumn() 和 fetchAll()。
fetch() 方法用于从结果集中获取下一行数据,基本语法格式如下:
$mode 的值必须是 PDO::FETCH_* 系列常量中的一个,$mode 的可选值如下表所示:
下面演示如何使用 fetch() 方法处理结果集。创建 pdo02.php 文件,使用 fetch() 方法获取查询的数据,具体代码如下:
上述代码的运行结果为:
fetch() 方法用于从结果集中获取下一行数据,基本语法格式如下:
PDOStatement::fetch ( int $mode = PDO::FETCH_DEFAULT, // 返回方式(可选参数) int $cursorOrientation = PDO::FETCH_ORI_NEXT, // 可滚动游标(可选参数) int $cursorOffset = // 游标的偏移量(可选参数) )在上述语法格式中:
- $mode 用于控制结果集的返回方式;
- $cursorOrientation 是 PDOStatement 对象的一个可滚动游标,用于获取结果集中的某一行数据,默认值为 PDO:: FETCH_ORI_NEXT;
- $cursorOffset 表示可滚动游标的偏移量。
$mode 的值必须是 PDO::FETCH_* 系列常量中的一个,$mode 的可选值如下表所示:
可选值 | 说明 | 返回值 |
---|---|---|
PDO::FETCH_ASSOC | 以关联数组的方式提取结果集中的数据 | 每一行的数据将被返回为一个关联数组,其中键是列名,值是对应的数据值 |
PDO::FETCH_NUM | 以索引数组的方式提取结果集中的数据 | 每一行的数据将被返回为一个索引数组,其中索引从 0 开始,值为对应的数据值 |
PDO::FETCH_BOTH | 同时以关联数组和索引数组的方式提取结果集中的数据 | 每一行的数据将被返回为一个混合数组,其中既包含字符串键名也包含数字键名,即每个列名对应两个键名 |
PDO::FETCH_OBJ | 以匿名对象的方式提取结果集中的数据 | 每一行的数据将被返回为一个匿名对象,其中属性名对应列名,属性值对应数据值 |
PDO::FETCH_LAZY | 以延迟加载的方式提取结果集中的数据,只有在访问数据时才会从数据库中取出 | 在访问数据时,会返回一个包含该行数据的对象,对象的属性名对应列名,属性值对应数据值 |
PDO::FETCH_BOUND | 将结果集中的列值分配给 PDOStatement::bindColumn() 方法绑定的变量 | 返回 true,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量 |
PDO::FETCH_CLASS | 将结果集中的数据映射为指定请求类的实例 | 返回一个请求类的实例,其中的属性会被赋值为结果集中对应的列值 |
PDO::FETCH_INTO | 将结果集中的数据映射为指定被请求类的实例 | 返回一个被请求类已存在的实例,其中命名的属性会被赋值为结果集中对应的列 |
下面演示如何使用 fetch() 方法处理结果集。创建 pdo02.php 文件,使用 fetch() 方法获取查询的数据,具体代码如下:
<?php $dsn = 'mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4'; $pdo = new PDO($dsn, 'root', '123456'); $sql = 'SELECT `id`, `name` FROM `student` LIMIT 2'; $res = $pdo->query($sql); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { echo $row['id'] . ' - ' . $row['name'] . '<br>'; }在上述代码中:
- 第 5 行代码将查询的结果集保存到 $res 变量中;
- 第 6 行代码在循环语句中调用 fetch() 方法获取结果集中的下一行数据,直到结果集中没有数据时,终止循环。
上述代码的运行结果为:
1 - Allen
2 - James