PHP 服务扩展MySQL模块和驱动介绍

2018-02-27 0 By admin

PHP服务通过SAPI提供接口对Web服务器(nginx,apache)调用提供支持。PHP服务本身包括核心库和扩展库。
核心库提供基本编程域名处理API。
扩展库可以根据实际需要添加或者删除。补充说明

PHP服务的SAPICGI和FastCGI解释

一、PHP 服务支持MySQL连接的扩展模块

MySQL,MySQLi和pdo_MySQL都是PHP的功能扩展模块,功能上都能实现连接MySQL数据库;起着连接器的作用。

1.1、MySQL 扩展模块

MySQL 扩展是一个早期的面向过程连接的扩展。
从 PHP 5.5.0 起这个扩展已经被废弃,并且从 PHP 7.0.0. 开始被移除。作为替代,可以使用 mysqli 或者 PDO_MySQL 扩展代替。

1.2、MySQLi 增强版扩展模块

MySQL增强版扩展(MySQL Improved Extension)提供了支持面向过程和面向对象的编程接口。
MySQLi扩展包含在PHP5以后的版本中,增加了对包含MySQL4.1.3服务和以后版本的新高级特性的支持。
mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:
1、面向对象接口
2、prepared语句支持(译注:关于prepare请参阅mysql相关文档)
3、多语句执行支持
4、事务支持
5、增强的调试能力
6、嵌入式服务支持

1.3、PDO_MySQL 数据对象扩展

PHP数据对象(PHP Database Object)是PHP应用中的一个数据库抽象层规范。
1、编码的一致性
由于PHP可用的各种数据库扩展是由不同发行者编写的,所以尽管所有的扩展都提供了基本相同的特性,却不满足编码的一致性。PDO消除了这种不一致,提供了可用于各种数据库的单一接口。
2、灵活性
因为PDO在运行时加载必须的数据库驱动程序,所以不需要在每次使用不同数据库时重新配置和重新编译PHP。例如,如果数据库需要从SQL server切换到MySQL,只需要加载PDO_MYSQL驱动程序就可以了。
3、面向对象特性
PDO利用PHP5的面向对象特性,可以获得更强大、更高效的数据库通信。
4、高性能
PDO是用C编写的,编译为PHP,与用PHP编写的其他解决方案相比,虽然其他都相同,但提供了更高的性能。

二、扩展包底层依赖的驱动库

上文提到的MySQL扩展的实现都需要依赖底层库来支持协议交互。

2.1、MySQL Client Library

过去可使用的库,只有MySQL Client Library称为libmysqlclient。这个库的名字根据库类型和平台不同而名字也不一样。
Unix-like systems:静态库libmysqlclient.a;动态库libmysqlclient.so
Windows systems:静态库mysqlclient.lib ;动态库libmysql.dll。

libmysqlclient提供的接口并没有针对与PHP的应用交互进行优化,因为libmysqlclient最初是为C应用程序设计的。

2.2、PHP Native Driver

MySQL Native驱动mysqlnd作为PHP应用程序的libmysqlclient驱动替代品而开发出来了。
mysql、mysqli以及PDO Mysql扩展模块都可以各自配置使用 libmysqlclient或者mysqlnd。
mysqlnd作为一个专门设计用于PHP系统的库,它在内存和速度上都比libmysql有很大提升。

2.3、使用mysqlnd的优点

mysqlnd库高度优化并紧密集成到PHP中。libmysqlclient库不能提供相同的优化,因为它是一个通用客户端库。
mysqlnd库正在使用PHP内部C基础架构来无缝集成到PHP中。另外,它使用PHP内存管理,PHP Streams(I/O抽象)和PHP字符串处理例程。
通过mysqlnd使用PHP内存管理,例如,通过使用只读变量(复制写入)节省内存,并使mysqlnd适用于PHP内存限制。其他优点包括:
1、强大的插件API来扩展功能集
2、异步,非阻塞查询
3、150+的表现统计
4、随PHP 5.3和更高版本一起发货
5、无需安装MySQL客户端库
6、强大的插件