现在,如果你已经能闇练地利用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在数据库处理方面的紧张发展方向。