现在,如果你已经能熟练地使用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的更多相关文章

  1. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12

    18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...

  2. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 11

    18.8.3  完美分页类的代码实现 分页类的编写除了需要使用在18.8.2节中提供的可以操作的3个成员方法,还需要更多的成员,但其他的成员方法和成员属性只需要内部使用,并不需要用户在对象外部操作,所 ...

  3. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 7

    18.6  PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句 ...

  4. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 4

    18.4  创建PDO对象 使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象.在通过构造方法创 ...

  5. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 10

    18.8  设计完美分页类 数据记录列表几乎出现在Web项目的每个模块中,假设一张表中有十几万条记录,我们不可能一次全都显示出来,当然也不能仅显示几十条.为了解决这样的矛盾,通常在读取时设置以分页的形 ...

  6. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 9

    18.7  PDO的事务处理 事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作.如果组中的所有SQL语句都操作成功,则认为事务成功,那么事务被提交,其修改将作用于所 ...

  7. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8-1

    18.6.5  获取数据 PDO的数据获取方法与其他数据库扩展非常类似,只要成功执行SELECT查询,都会有结果集对象生成.不管使用PDO对象中的query()方法,还是使用prepare()和exe ...

  8. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8

    18.6.4  执行准备好的查询 当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了.在下面的示例中,向前面 ...

  9. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 6

    18.5.3  PDO的错误处理模式 PDO共提供了3种不同的错误处理模式,不仅可以满足不同风格的编程,也可以调整扩展处理错误的方式. 1.PDO::ERRMODE_SILENT 这是默认模式,在错误 ...

随机推荐

  1. ES6.x

    类 class Animal{ constructor(name){ this.name=name } Spack(){ console.log(name) } } class Dog extends ...

  2. robotframework框架 - 利用RequestsLibrary关键字轻松实现接口自动化!

    robotframework(后续简称为robot)是一款自动化测试框架,可能做各种类型的自动化测试. 本文介绍通过robotframework来做接口测试. 第一步:安装第三方库,提供接口测试的关键 ...

  3. 【cf961G】G. Partitions(组合意义+第二类斯特林数)

    传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...

  4. celery配置

    celery配置 celery的官方文档其实相对还是写的很不错的.但是在一些深层次的使用上面却显得杂乱甚至就没有某些方面的介绍, 通过我的一个测试环境的settings.py来说明一些使用celery ...

  5. Java之Calendar类

    Calendar类概述 java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法.该类将所有可能用到的时间信息封装为静态成员变量,方便获取.日历类就是方便获取各个时 ...

  6. 查看Oracle被锁的表以及如何解锁

    注意权限问题 1.查看是否有被锁的表: select b.owner,b.object_name,a.session_id,a.locked_modefrom v$locked_object a,db ...

  7. 墙上你APP设计与实现

    墙上你APP,听名字你们就应该可以想到是一个类似于表白墙吧,其实在做这个项目的时候我就是看到我们学校有一个专门工程墙,但是你找它发布消息表白或者找寻自己在学校掉了的饭卡或者身份证的时候,需要等它们同意 ...

  8. Java分布式系统---消息中间件

    简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信.当下主流 ...

  9. CSS学习笔记-盒子阴影及文字阴影

    盒子阴影:    1.格式:        box-shadow:h-shadow v-shadow blur spread color insert;        box-shadow:水平偏移 ...

  10. 微信小程序支付功能 C# .NET开发

    微信小程序支付功能的开发的时候坑比较多,不过对于钱的事谨慎也是好事.网上关于小程序支付的实例很多,但是大多多少有些问题,C#开发的更少.此篇文档的目的是讲开发过程中遇到的问题做一个备注,也方便其他开发 ...