对PHP连接MySQL和其他数据库方式的理解
PHP/MySQL是主流的应用开发搭配方式,印象中PHP支持使用很多种数据库,而且MySQL就有mysql、mysqli、pdo三种API可用。本文旨在从PHP数据库访问设计的思路为轴,简单的捋清这些关系。
PHP手册中《数据库扩展》一章有两部分:数据库抽象层、针对各数据库系统对应的扩展,已经是足够的说明了,要更深刻的理解可去研读。
首先,直接的想法是,PHP应该为不同的数据库实现不同的数据库抽象层,调用客户端库API来使用DBMS。如下图:
然后,考虑这个场景:当PHP应用写好后,环境数据库不同时,就要用对应的数据库抽象层重写项目所有数据库相关代码。所以能否把访问抽象出来,用不同数据库时,只要切换不同实现就ok了。如下图:
最后,主流选用MySQL当然是既可以使用mysql、mysqli两种数据库抽象层,又可以使用PDO数据访问抽象层(须安装PDO_MYSQL扩展实现PDO接口)。如下图:
当然任何一个数据库抽象层,都要在PHP编译时都要指定数据库的客户端库以使用数据库服务器。以MySQL为例,推荐用mysqlnd库,配置项:--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd
现在是不是清晰些了呢?