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();
}
?>
运行结果如下: