三、列表及查询

三、列表及查询

图示

1.最简单的列表程序(select1.php)

以下是一个最简单的PHP数据列表程序。

图示

程序列表结果如图5-41所示。

图示

图5-41 最简单的数据列表程序结果

图示

通过SQL的select语句(select * from 表名)查询表中数据。

通过foreach语句循环表中的内容。每个数据项之前用空格隔开,每行数据内容用“
”换行。按数据表中项的位置顺序读出了$row[0]、$row[1]、$row[2]三个数据项。

如果你希望按数据项的列名来读出数项就可以把:

图示

改为:

图示

2.排序(select2.php)

在select语句的后面加一句:

order by 项目名称

可以轻松地实现排序。如果实现倒序排序,则可以加个desc的关键字。下面举几个排序的例子加以说明。

(1)按id倒序排序

图示

(2)按name拼音排序

图示

(3)先按address音序倒排序,再按name音序倒排序。两条排序条件之间用逗号隔开。

图示

3.条件查询

图示

修改select查询条件,可以列出符合条件的部分条目内容。以下举例说明。

(1)显示id=2的记录

图示

(2)列出name中“李”字打头的记录

图示

(3) 列出name中含有“伟”字的记录

图示

(4) 列出name的第二个字是“伟”字的记录

图示

(5) 列出address是“北京”的,且name中含有“伟”字的记录

图示

图示

(6) 列出id大于3且id小于等于5的记录

图示

(7)列出前面4条记录

图示

4.将列表排入表格

图示

上面只是简单地把要列的内容列出来。如果要将列表内容输出到表格中,可以把程序改成这样:

图示

打印了一个表头。

图示

打印了表格结束。

图示(https://www.daowen.com)

循环打印了表格的每一行,每一行由<tr>开始由</tr>结束,中间是一个个<td></td>数据项。每个数据项中填入从数据库里读出的数据内容,如图5-42所示。

图示

图5-42 表格显示列表

如果你觉得这个表格太丑,可以用CSS装饰它,也可以用Bootstrap把它设计得美观一些。

5.统计符合条件的条目数

图示

统计就是查询后计数的过程,所以查询语句与前面没什么不同,只是用了一条计数语句来解决这个问题。

图示

以下是全部程序:

图示

6. 错误判断及SQL防注入预处理

图示

(1)加入防注入预处理

图示

图示

这个程序列出了所有name="李伟"条目,$stmt->rowCount()可以计算出查询出来的条目数。

加入了try……catch错误判断,让程序更完善。通过:

图示

参数绑定实现了防SQL注入的功能。

(2)使用fetch

Fetch是PHP PDO获取结果集的一种方法。

图示

$row取走$stmt->fetch()得到的第一行数据,再执行一次$stmt-> fetch()则以取走一行数据(原来的第二行),直到全部取空为止。

图示

以上这个例子就是用fetch循环输出查询结果集,设置结果集为关联数组的例子。

图示

fetch中的参数控制结果集的返回方式,可选方式如下:

PDO::FETCH_ASSOC 关联数组形式。

输出例句:

图示

PDO::FETCH_NUM 数字索引数组形式。

输出例句:

图示

PDO::FETCH_BOTH 关联数组和数字索引数组两者都有的形式。

图示

PDO::FETCH_BOTH缺省的时候,即fetch()相当于:PDO::FETCH_BOTH。为了让学生易于学习,以后的例子都采用缺省的形式,当然正式编程的时候还是应该有所区分,否则会占用大量内存。

此外还有PDO::FETCH_OBJ、PDO::FETCH_BOUND、PDO::FETCH_LAZY等形式。

PDOStatement对象有fetch()、fetchAll()、fetchColumn()三种方法。

fetchAll():获取PDOstatement对象中的所有行数据,参数有FETCH_BOTH、FETCH_NUM、FETCH_ASSOC;

fetch():获取查询结果中一行记录并可以通过参数的不同、显示的方式不同,可用循环实现显示所有行记录;

fetchColumn():获得下一行的一列,可以通过循环获取多行的单一的列。

(3)绑定结果的范例

图示

图示

图示

这里用到的SQL根据姓名进行了排序。同时说明了结果绑定的方法与query、foreach配合的方法。

(4)绑定参数、输出表格

图示

这个范例输出结果为一个表格。参数绑定与前几例用了不同的方法。

以上几个范例,用到了三种不同的参数绑定方法,用到了一种结果绑定的方法,用到了两种循环方法、两种执行查询的方法。同时,还用到了SQL的多种查询方法。