《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1
现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了。PHP提供了标准的函数来操作数据库。在PHP 5以上的版本中可以使用MySQL和MySQLi两套扩展函数,MySQLi是PHP 5中新增的,是对MySQL扩展的改进。但由于历史遗留问题,很多老项目是在PHP 4时使用MySQL扩展开发的,如果在原有的项目上进行二次开发,或者找一些学习的例子,都要求开发人员会使用MySQL扩展函数。如果是新设计的项目,则推荐使用MySQLi扩展或本章中介绍的PDO技术。另外,PHP7全面删除了MySQL扩展函数支持。
18.1 PHP访问MySQL数据库服务器的流程
MySQL采用的是“客户机/服务器”体系结构。在前面的章节中我们一直使用命令行来远程管理MySQL数据库服务器,这种方式只适合DBA(数据库管理员)或程序开发人员等技术人员去管理数据库。能不能让一个不懂技术的普通用户去管理数据库呢?答案是肯定的,可以使用PHP脚本去处理数据库中的数据,则PHP充当了MySQL“客户机”的角色。因为通过PHP程序再结合一些前台技术开发的图形界面,就可以很轻松地管理数据库了,如图18-1所示为“客户机/服务器”两种体系结构的对比。

图18-1 “客户机/服务器”两种体系结构的对比
使用PHP和直接使用客户端软件访问MySQL数据库服务器,原理及操作步骤是相同的,如图18-1所示,都需要向MySQL管理系统发送SQL命令,而SQL命令的执行则由MySQL系统本身去处理,再将查询处理结果返给请求的用户。在PHP,中可以将SQL语句划分为两种情况去操作:一种是有返回结果集的,像“SELECT”及“DESC表名”等语句,执行完成后还要在PHP中处理查询结果;另一种则是在执行后没有结果集的,像DML(INSERT/ UPDATE/DELETE)、DDL(CREATE/DROP/ALTER)或“SET NAMES utf8”等语句。DML语句执行成功后会对数据表记录行有影响,是我们操作的重点;DDL语句则很少在PHP中使用。PHP访问MySQL数据库的流程如图18-2所示。

图18-2 PHP访问MySQL数据库的流程
从图18-2中可以看出,必须让PHP程序先连上MySQL数据库服务器,再选择一个数据库作为默认操作的数据库,才能向MySQL数据库管理系统发送SQL语句。如果发送的是INSERT、UPDATE或DELETE等SQL语句,MySQL执行完成并对数据表的记录有所影响,则说明执行成功。如果发送的是SELECT这样的SQL语句,则会返回结果集,还需要对结果集进行处理。处理结果集又包括获取字段信息和获取记录数据两种操作,而多数情况下只需要获取记录数据即可。脚本执行结束后还需要关闭本次连接。
PHP访问MySQL数据库服务器相对于PHP5、PHP7的变化之一是移除了MySQL扩展,推荐使用MySQLi或pdo_MySQL,实际上从PHP5.5开始,PHP就着手准备弃用MySQL扩展,如果你还在使用MySQL扩展,可能看到过这样的提示“Deprecated: MySQL_connect(): The MySQL extension is deprecated and will be removed in the future: use MySQLi or PDO instead in”。因此,在以后的程序中,为了保持兼容性,要尽量减少将MySQL扩展用于数据库连接。PDO(PHP Data Object)的出现让PHP达到了一个新的高度。PDO扩展类库为PHP访问数据库定义了一个轻量级、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据,这大大简化了数据库的操作,并能够屏蔽不同数据库之间的差异。使用PDO可以很方便地进行跨数据库程序的开发,以及不同数据库间的移植,是将来PHP在数据库处理方面的主要发展方向。


《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1的更多相关文章
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
18.9 管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...
- 《细说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 这是默认模式,在错误 ...
随机推荐
- V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)
V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245. ...
- java之List接口(单列集合)
List接口概述 查询API我们可知:java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对 象称为List集合.在Li ...
- String对象及正则表达式
1,String和string还是有区别的,一个就是用双引号或单引号包括起来的数据就是字符串,另一个本质是数组多个字符串组成的只读字符数组: 2,你说string他是数组吧,他和数组还是有点区别的,他 ...
- Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控
本文概要:大白话剖析调用链监控原理,然后学习Sleuth,Zipkin,然后将Sleuth整合Zipkin,最后学习Zipkin数据持久化(Elasticsearch)以及Zipkin依赖关系图 实战 ...
- Java向上下转型中的陷阱{详细}
1: 多态 多态时继承下面的产物,之所以存在向上向下转型的目的,就是解决参数传递的不变形,体现面向接口编程的重要性, 1.1 方法的多态性 ①. 方法的重载:同一个方法名称可以根据参数的类型或 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow (树上差分)
###题目链接### 题目大意: 给你一棵树,k 次操作,每次操作中有 a b 两点,这两点路上的所有点都被标记一次.问你 k 次操作之后,整棵树上的点中被标记的最大次数是多少. 分析: 1.由于数 ...
- JS 实现动态轮播图
JavaScript实现轮播图思路 + html/css + js源码 整个轮播图的效果是通过js代码,操作dom, 拿到html我们需要的元素,控制整个ul的距离浏览器左边的位置,让排好的图片依次出 ...
- windows下cocos2d-x工程结构讲解
这是我们新建好的工程,稍微解释一下我们开发windows的cocos应用所用到的几个文件夹的作用 Classes文件夹,存放游戏代码中的类的源码,当然我们放在别的地方也可以,只要配置好依赖关系就行了 ...
- Linux-正则、grep、sed学习笔记
一.正则和grep 正则表达式的实现分成了两类: 基本正则表达式(BRE)和扩展的正则表达式(ERE). BRE 和 ERE 之间有什么区别呢?这是关于元字符的问题.BRE 可以辨别以下元字符: ^ ...
- 安全意识第八期丨OMG!发个帖子竟然摊上大事了
互联网时代,话在网上说.钱在网上花.事在网上办,这早已成为一种习惯,越来越多的人也倾向于通过网络来获取信息. 借助现代信息技术,网络传播者通过即时通讯工具.微博.朋友圈等渠道发布信息,虽然传播起来更便 ...