PDO的数据获取方法与其他数据库扩展都非常类似,只要成功执行SELECT查询,都会有结果集对象产生。不管是使用PDO对象中的query()方法,还是使用prepare()和execute()等方法结合的预处理语句,执行SELECT查询都会得到相同的结果集对象PDOStatement。都需要通过PDOStatement类对象中的方法将数据遍历出来。下面介绍PDOStatement类中常见的几个获取结果集数据的方法。
1、fetch()方法
PDOStatement类中的fetch()方法可以将结果集中当前的记录以某种方式返回,并将结果集指针移至下一行,当到达结果集末尾时返回FALSE。该方法的原型如下:
mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )
第一个参数fetch_style是可选项,获取一行数据记录中,各列的引用方式取决于这个参数如何设置。可以使用的设置有以下6种。
PDO::FETCH_ASSOC 从结果集中获取以列名为索引的关联数组。
PDO::FETCH_NUM 从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
PDO::FETCH_BOTH 这是默认值,包含上面两种数组。
PDO::FETCH_OBJ 从结果集当前行的记录中获取其属性对应各个列名的一个对象。
PDO::FETCH_BOUND 使用fetch()返回TRUE,并将获取的列值赋给在bindParm()方法中指 定的相应变量。
PDO::FETCH_LAZY 创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这 三种接口中任选一种。
第二个参数cursor_orientation是可选项,用来确定当对象是一个可滚动的游标时应当获取哪一行。
第三个参数cursor_offset也是可选项,需要提供一个整数值,表示要获取的行相对于当前游标位置的偏移。
在下面的示例中,使用PDO对象中的query()方法执行SELECT查询,获取联系人信息表contactinfo中的信息,并返回PDOStatement类对象作为结果集。然后通过fetch()方法结合while循环遍历数据,并以HTML表格的形式输出。代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?php
try
{
$dbh
=
new
PDO(
'mysql:dbname=testdb;host=localhost'
,
$username
,
$passwd
);
}
catch
(PDOException
$e
){
echo
'数据库连接失败:'
.
$e
->getMessage();
exit
;
}
echo
'<table border="1" align="center" width=90%>'
;
echo
'<caption><h1>联系人信息表</h1></caption>'
;
echo
'<tr bgcolor="#cccccc">'
;
echo
'<th>UID</th><th>姓名</th><th>联系地址</th><th>联系电话</th><th>电子邮件</th></tr>'
;
//使用query方式执行SELECT语句,建议使用prepare()和execute()形式执行语句
$stmt
=
$dbh
->query(
"select uid,name,address,phone,email FROM contactinfo"
);
//以PDO::FETCH_NUM形式获取索引并遍历
while
(list(
$uid
|