PDO 的数据获取方法与其他数据库扩展都非常类似,只要成功执行 SELECT 查询,都会有结果集对象生成。不管是使用 PDO 对象中的 query() 方法,还是使用 prepare() 和 execute() 等方法结合的预处理语句,执行 SELECT 查询都会得到结果集对象 PDOStatement。
通过 PDOStatement 类中的方法就可以获取 SELECT 语句的查询结果,下面介绍 PDOStatement 类中常见的几个获取结果集数据的方法。
fetch() 方法可以从一个 PDOStatement 对象的结果集中获取当前行的内容,并将结果集指针移至下一行,当到达结果集末尾时返回 FALSE,该方法的语法格式如下:
参数说明如下:
【示例】使用 fetch() 方法,获取 SELECT 语句的查询结果。
- <?php
- $dsn = 'mysql:host=127.0.0.1;dbname=test';
- $user = 'root';
- $pwd = 'root';
- try{
- $pdo = new PDO($dsn,$user,$pwd);
- $sql = 'SELECT name,age,sex FROM user WHERE age = \'11\'';
- $res = $pdo -> query($sql);
- echo '<pre>';
- while ($row = $res -> fetch(PDO::FETCH_ASSOC)){
- print_r($row);
- }
- }catch(PDOException $e){
- echo '数据库连接失败:'.$e -> getMessage();
- }
- ?>
运行结果如下:
fetchAll() 方法与上面介绍的 fetch() 方法类似,但是该方法只需要调用一次就可以获取结果集中的所有行,并赋给返回的数组。该方法的语法格式如下:
参数说明如下:
【示例】使用 fetchAll() 方法,获取 SELECT 语句的查询结果。
- <?php
- $dsn = 'mysql:host=127.0.0.1;dbname=test';
- $user = 'root';
- $pwd = 'root';
- try{
- $pdo = new PDO($dsn,$user,$pwd);
- $sql = 'SELECT name,age,sex FROM user WHERE sex = \'女\'';
- $res = $pdo -> query($sql);
- $data = $res -> fetchAll(PDO::FETCH_ASSOC);
- echo '<pre>';
- print_r($data);
- }catch(PDOException $e){
- echo '数据库连接失败:'.$e -> getMessage();
- }
- ?>
运行结果如下:
fetchColumn() 方法可以获取结果集中当前行指定字段的值,其语法格式如下:
其中参数 $column_number 为想从行里取回的列的索引数字(以 0 开始)。如果没有提供值,则获取第一列。
【示例】使用 fetchColumn() 方法,获取指定字段的值。
- <?php
- $dsn = 'mysql:host=127.0.0.1;dbname=test';
- $user = 'root';
- $pwd = 'root';
- try{
- $pdo = new PDO($dsn,$user,$pwd);
- $sql = 'SELECT name,age,sex FROM user';
- $res = $pdo -> query($sql);
- echo '当前行第一列的值为:'.$res -> fetchColumn().'<br>';
- echo '当前行第三列的值为:'.$res -> fetchColumn(2).'<br>';
- echo '当前行第二列的值为:'.$res -> fetchColumn(1).'<br>';
- }catch(PDOException $e){
- echo '数据库连接失败:'.$e -> getMessage();
- }
- ?>
运行结果如下: