《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
18.9 管理表books实例
在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增、删、改、查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的。本例为了能更好地展示PDO的应用,并没有将数据表的操作封装成一个数据库操作类,而是采用了过程化的编写方式,用最直接的方式实现。
18.9.1 需求分析
本例主要的目标是实现对图书信息表books的管理过程,包括添加图书、修改图书、删除图书、遍历图书列表、搜索图书等操作。创建数据表books的SQL语句如下所示。

创建后,表的结构信息和具体的需求说明如下所示。

(1)在主页面上可以通过简单的菜单,获取添加图书表单、图书列表和搜索图书3个选项按钮,默认页面中显示所有图书的列表。
(2)添加图书的功能包括:录入图书名称、出版社名称、图书作者、图书价格及图书介绍,上架时间可通过获取当前系统时间进行添加,还需要上传图书的封面图片。
(3)图书列表只需要显示图书编号、图书名称、图书图片、出版社名称、图书作者、图书价格和上架时间,还要使用分页技术限制每页显示10条记录,并且每条记录都有修改和删除的操作入口。
(4)修改图书通过图书列表的入口进入修改图书,和添加图书表单界面相似,并通过传递的图书ID获取要修改图书的全部内容,填到对应的表单项中。如果有新图书的封面图片上传,还要将原图片删除。
(5)搜索图书可以指定多个搜索条件,包括图书名称、图书作者、出版社名称和图书价格范围,也可以指定其中的一个或多个作为筛选条件进行搜索,并且搜索的结果列表和图书列表是相同的,并能提示搜索的条件。当通过分页进入其他页面时,也要保持同样的搜索结果。
(6)删除图书也在图书列表中进行,为每条记录设置一个删除按钮。删除成功要返回图书列表,并且保持在当前页面中。如果是搜索结果列表,删除一条记录后还要保持原列表的状态。另外,删除一条记录的同时也要删除图书封面图片,防止产生永远也访问不到的垃圾图片。
注意:在上传图片时,需要通过缩放控制图片尺寸在一定的范围内,同时添加水印。
18.9.2 程序设计
根据需求,本例共需要4个可操作的模板,分别为添加图书表单、修改表单、表单及图书列表,需要在单独的文件中各自独立声明,并且所有的操作都需要提交给一个控制文件去处理,连接数据库和函数库也需要作为公共资源在独立的文件中声明。图书表管理需要声明的文件及描述如表18-8所示。
表18-8 图书表管理需要声明的文件及描述

所有图书列表,以分页形式显示所有图书记录,同时也是搜索结果的列表页面
在index.php脚本中,需要提供进入添加图书表单、显示图书列表和搜索图书表单三个入口的链接,默认以分页形式显示全部的图书列表。另外,该脚本也可作为图书管理的控制器文件,用户的每个操作都需要提交给该脚本进行处理,并通过GET方法提交的 action 变量区分用户的动作。脚本index.php的代码如下所示:




添加图书表单是通过单击主页面中的链接入口,并在index.php脚本中通过action=add导入添加图书表单脚本文件add.inc.php的。代码如下所示:

在添加表单中录入图书信息后,提交给index.php脚本,并通过action=insert辨别用户的操作。添加数据前,先通过导入conn.inc.php文件,创建PDO对象并与数据库建立连接,再将表单中通过POST方法提交的数据组合成INSERT语句,通过PDO发送给MySQL,然后添加到表books中。脚本conn.inc.php的代码如下所示:

另外,添加和修改图书时需要上传图书封面图片,并缩放图片尺寸至指定的范围,还要为其添加水印。同时,也需要制作一个图标文件,作为图片列表显示。图片缩放和加水印的操作,借助前面章节中介绍的FileUpload和Image类完成。将上传的处理过程声明在函数库文件func.inc.php中,代码如下所示:

修改图书表单是通过单击图书列表记录中的链接入口,并在index.php脚本中通过action=mod导入修改表单脚本文件mod.inc.php完成的。录入需要修改的内容后再提交给index.php处理,通过action=update辨别用户的操作。代码如下所示:

搜索图书表单是通过单击主页面中的链接入口,并在index.php脚本中通过action=ser导入搜索图书表单脚本文件ser.inc.php完成的。录入需要搜索的内容后再提交给index.php处理,通过action=list辨别用户的操作,代码如下所示:

主页面中默认显示图书列表,也可以通过单击主页面中的链接入口进行图书列表显示,删除一本图书成功以后还要回到图书列表页面,搜索图书的处理和显示结果是同一个图书列表。在脚本list.inc.php中处理和显示图书列表,代码如下所示:




借助前面介绍的Page类来完成图书列表分页显示。删除一条记录后,还可以确保回到当前作的页面。数据表books管理的演示结果如图18-12所示。

图18-12 数据表books管理的演示结果
18.10 小结
本章必须掌握的知识点
Ø PDO的安装。
Ø 创建PDO对象。
Ø 使用PDO的错误处理模式。
Ø PDO对预处理的操作方式。
Ø 事务处理。
Ø 分页类。
Ø 图书管理实例。
本章需要了解的内容
Ø 使用PDO执行SQL语句的方式[xec()和query()方式]
Ø 大数据对象的存取。
Ø PDO中常见的一些常量。
本章需要拓展的内容
Ø 用PDO访问其他数据库。









《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12的更多相关文章
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1
现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用My ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 11
18.8.3 完美分页类的代码实现 分页类的编写除了需要使用在18.8.2节中提供的可以操作的3个成员方法,还需要更多的成员,但其他的成员方法和成员属性只需要内部使用,并不需要用户在对象外部操作,所 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 7
18.6 PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 4
18.4 创建PDO对象 使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象.在通过构造方法创 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 10
18.8 设计完美分页类 数据记录列表几乎出现在Web项目的每个模块中,假设一张表中有十几万条记录,我们不可能一次全都显示出来,当然也不能仅显示几十条.为了解决这样的矛盾,通常在读取时设置以分页的形 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 9
18.7 PDO的事务处理 事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作.如果组中的所有SQL语句都操作成功,则认为事务成功,那么事务被提交,其修改将作用于所 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8-1
18.6.5 获取数据 PDO的数据获取方法与其他数据库扩展非常类似,只要成功执行SELECT查询,都会有结果集对象生成.不管使用PDO对象中的query()方法,还是使用prepare()和exe ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8
18.6.4 执行准备好的查询 当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了.在下面的示例中,向前面 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 6
18.5.3 PDO的错误处理模式 PDO共提供了3种不同的错误处理模式,不仅可以满足不同风格的编程,也可以调整扩展处理错误的方式. 1.PDO::ERRMODE_SILENT 这是默认模式,在错误 ...
随机推荐
- flash的几种模式Normal Mode、DUAL Mode、Quad Mode的概念和区别
概念 1. 标准SPI 标准SPI通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:clk , cs, mosi, miso 2. Dual SPI 它只是针对SPI Flash而言,不是针对 ...
- str函数之不同变量之间如何连接,外加浮点运算注意事项
最近看书了解到不同字符串之间可以用“+”号来连接,遂思考如何将不同变量连接起来,思考试验并上网查询后得出了结果,在此将所学分享给在阅读的各位. 数据类型的转换 常识可知,在python中,不同的数 ...
- java获取月的第一天和最后一天
在Java中获取月的第一天和最后一天主要是通过Calendar对象来实现. /** * 获取月的第一天 * * @param month 月 */ private String getMonthBeg ...
- 这几个 Chrome 的 Tab 增强插件你都用上了吗?
1.OneTab:将无数 Tab 合并在一个页面 很多时候我们在一个窗口打开太多的tab,每一个tab太小不容易管理,这时候使用OneTab能够把所有tab收起放在一个页面,点击就可打开该tab,非常 ...
- 松软科技web课堂:SQLServer之UCASE() 函数
UCASE() 函数 UCASE 函数把字段的值转换为大写. SQL UCASE() 语法 SELECT UCASE(column_name) FROM table_name SQL UCASE() ...
- Wappalyzer(chrome网站分析插件)
Wappalyzer是一款功能强大的.且非常实用的chrome网站技术分析插件,通过该插件能够分析目标网站所采用的平台构架. 网站环境.服务器配置环境.JavaScript框架.编程语言等参数,使用时 ...
- 2019 DevOps 必备面试题——持续集成篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...
- [20191101]通过zsh计算sql语句的sql_id.txt
[20191101]通过zsh计算sql语句的sql_id.txt 1.简单介绍以及测试使用zsh遇到的问题:--//前段时间写的,链接http://blog.itpub.net/267265/vie ...
- tomcat修改进程名称
1.window平台: 打开tomcat_home\bin\setclasspath.bat文件,找到set _RUNJAVA=”%JRE_HOME%\bin\java”这一行. 将该行注释掉 ,然后 ...
- CK:User mode Bus Error(用户空间操作内核地址导致的异常)
关键词:VEC_ACCESS.coredump.LR.PC等. CK中存在一种VEC_ACCESS异常,可能原因是用户空间访问了内核空间,还有一种是内核访问不存在的总线地址. 下面简单构造VEC_AC ...