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

最新文章

  1. CLR 这些年有啥变化吗?
  2. arm_GPIO_简单编程例题
  3. #研发解决方案#基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案
  4. js+cookie 购物车
  5. CENTOS7 添加自定义快捷键(启动TERMINAL,显示桌面等)
  6. 为什么使用spring Struts 等框架开发
  7. ASP超级网店V2.5一注入漏洞
  8. js formatString 格式化字符串
  9. 基于Ubuntu 14.04构建mysql5.6 Docker镜像
  10. UWP xaml 圆形头像
  11. 微信小程序之bindtap事件绑定传参
  12. 解决DEDECMS Call to undefined function dede_htmlspecialchars()
  13. 关于截取URL地址参数的方法
  14. Eleaticsearch源码分析(一)编译启动
  15. [python] 查找列表中重复的元素
  16. Spring本质-AOP
  17. 最近邻规则分类(k-Nearest Neighbor )机器学习算法python实现
  18. ansible的几点记录
  19. jenkins上展示html报告【转载】
  20. 怎样利用JDBC启动Oracle 自己主动追踪(auto trace)

热门文章

  1. [Go] 实现面向对象中的继承和覆盖方法
  2. Paint.NET软件分享
  3. 【cf932E】E. Team Work(第二类斯特林数)
  4. Vue小练习 02
  5. MongoDB增删改查表文档
  6. leetcode-數組篇
  7. ef实现一次查询多个聚合函数的字段
  8. django中使用pandas Django-pandas
  9. Python进阶二
  10. Java - IO 内存流和打印流