文本:“PDO 不允许您使用 MySQL 对多条语句的支持”已过时。
从 v5.3 开始,PHP 在 PDO 中引入了多条语句支持(通过 PDO_MYSQLND 驱动程序替换以前的 PDO_MYSQL)。
本节介绍了在开发需要与 MySQL 数据库交互的 PHP 应用程序时可用的选项。
什么是 API?
应用程序编程接口 (API) 定义了应用程序执行所需任务时需要调用的类、方法、函数和变量。对于需要与数据库通信的 PHP 应用程序,必要的 API 通常通过 PHP 扩展公开。
API 可以是过程式的或面向对象的。使用过程式 API,您调用函数来执行任务,使用面向对象 API,您实例化类,然后在结果对象上调用方法。在这两者中,后者通常是首选接口,因为它更现代化,并导致代码组织得更好。
在编写需要连接到 MySQL 服务器的 PHP 应用程序时,可以使用多种 API 选项。本文档讨论了可用的选项以及如何为您的应用程序选择最佳解决方案。
什么是连接器?
在 MySQL 文档中,术语“连接器”指的是允许您的应用程序连接到 MySQL 数据库服务器的软件。MySQL 为各种语言提供连接器,包括 PHP。
如果您的 PHP 应用程序需要与数据库服务器通信,您将需要编写 PHP 代码来执行诸如连接到数据库服务器、查询数据库以及其他与数据库相关的函数等活动。需要软件来提供您的 PHP 应用程序将使用的 API,以及处理应用程序和数据库服务器之间的通信,可能在必要时使用其他中间库。此软件通常称为连接器,因为它允许您的应用程序“连接”到数据库服务器。
什么是驱动程序?
驱动程序是旨在与特定类型的数据库服务器通信的软件。驱动程序还可以调用库,例如 MySQL 客户端库或 MySQL 本机驱动程序。这些库实现了用于与 MySQL 数据库服务器通信的低级协议。
例如,PHP 数据对象 (PDO) 数据库抽象层可以使用多个数据库特定驱动程序中的一个。它可用的驱动程序之一是 PDO MYSQL 驱动程序,它允许它与 MySQL 服务器交互。
有时人们互换使用连接器和驱动程序这两个术语,这可能会令人困惑。在与 MySQL 相关的文档中,术语“驱动程序”保留用于提供连接器包中数据库特定部分的软件。
什么是扩展?
在 PHP 文档中,您会遇到另一个术语 -“扩展”。PHP 代码由核心组成,以及对核心功能的可选扩展。PHP 的与 MySQL 相关的扩展,例如 mysqli 扩展和 PDO MySQL 驱动程序扩展,是使用 PHP 扩展框架实现的。
扩展通常向 PHP 程序员公开 API,以允许以编程方式使用其功能。但是,一些使用 PHP 扩展框架的扩展不会向 PHP 程序员公开 API。
例如,PDO MySQL 驱动程序扩展不会向 PHP 程序员公开 API,而是为其上方的 PDO 层提供接口。
API 和扩展这两个术语不应被认为是相同的含义,因为扩展不一定向程序员公开 API。
使用 MySQL 的主要 PHP API 产品有哪些?
在考虑连接到 MySQL 数据库服务器时,有两个主要的 API 选项
PHP 的 mysqli 扩展
PHP 数据对象 (PDO)
每个都有其自身的优点和缺点。以下讨论旨在简要介绍每个 API 的关键方面。
什么是 PHP 的 mysqli 扩展?
mysqli
扩展,有时也称为 MySQL“改进”扩展,是为了利用 MySQL 系统版本 4.1.3 及更高版本中发现的新功能而开发的。mysqli
扩展包含在 PHP 5 及更高版本中。
mysqli
扩展具有许多优点,与 mysql
扩展相比,主要增强功能包括
面向对象的接口
支持预处理语句
支持多条语句
支持事务
增强的调试功能
除了面向对象的接口外,扩展还提供过程式接口。
mysqli
扩展是使用 PHP 扩展框架构建的,其源代码位于 ext/mysqli 目录中。
有关 mysqli
扩展的更多信息,请参见 MySQLi。
什么是 PDO?
PHP 数据对象 (PDO) 是专门用于 PHP 应用程序的数据库抽象层。PDO 为您的 PHP 应用程序提供一致的 API,无论您的应用程序将连接到哪种类型的数据库服务器。理论上,如果您使用的是 PDO API,则可以切换您使用的数据库服务器,例如从 Firebird 切换到 MySQL,并且只需要对 PHP 代码进行少量更改。
数据库抽象层的其他示例包括 Java 应用程序的 JDBC 和 Perl 的 DBI。
虽然 PDO 有其优点,例如简洁、简单、可移植的 API,但其主要缺点是它不允许您使用最新版本的 MySQL 服务器中提供的所有高级功能。例如,PDO 不允许您使用 MySQL 对多条语句的支持。
PDO 是使用 PHP 扩展框架实现的,其源代码位于 ext/pdo 目录中。
有关 PDO 的更多信息,请参见 PDO。
什么是 PDO MYSQL 驱动程序?
PDO MYSQL 驱动程序本身不是 API,至少从 PHP 程序员的角度来看是这样。实际上,PDO MYSQL 驱动程序位于 PDO 本身以下的层中,并提供特定于 MySQL 的功能。程序员仍然调用 PDO API,但 PDO 使用 PDO MYSQL 驱动程序来执行与 MySQL 服务器的通信。
PDO MYSQL 驱动程序是多个可用的 PDO 驱动程序之一。其他可用的 PDO 驱动程序包括 Firebird 和 PostgreSQL 数据库服务器的驱动程序。
PDO MYSQL 驱动程序是使用 PHP 扩展框架实现的。其源代码位于 ext/pdo_mysql 目录中。它不会向 PHP 程序员公开 API。
有关 PDO MYSQL 驱动程序的更多信息,请参见 MySQL (PDO)。
什么是 PHP 的 MySQL 本机驱动程序?
为了与 MySQL 数据库服务器通信,mysqli
和 PDO MYSQL 驱动程序都使用实现所需协议的低级库。过去,唯一可用的库是 MySQL 客户端库,也称为 libmysqlclient
。
但是,libmysqlclient
提供的接口没有针对与 PHP 应用程序的通信进行优化,因为 libmysqlclient
最初是针对 C 应用程序设计的。出于这个原因,MySQL 本机驱动程序 mysqlnd
被开发为 PHP 应用程序中 libmysqlclient
的替代方案。
无论是 mysqli
扩展还是 PDO MySQL 驱动程序,都可以分别配置为使用 libmysqlclient
或 mysqlnd
。由于 mysqlnd
专为在 PHP 系统中使用而设计,因此它在内存和速度方面比 libmysqlclient
有许多增强功能。强烈建议您利用这些改进。
MySQL Native Driver 使用 PHP 扩展框架实现。源代码位于 ext/mysqlnd 中。它不向 PHP 程序员公开 API。
功能比较
下表比较了从 PHP 连接到 MySQL 的主要方法的功能
PHP 的 mysqli 扩展 | PDO(使用 PDO MySQL 驱动程序和 MySQL Native Driver) | |
---|---|---|
引入的 PHP 版本 | 5.0 | 5.0 |
MySQL 开发状态 | 活跃开发 | 活跃开发 |
API 支持字符集 | 是 | 是 |
API 支持服务器端预处理语句 | 是 | 是 |
API 支持客户端预处理语句 | 否 | 是 |
API 支持存储过程 | 是 | 是 |
API 支持多条语句 | 是 | 大部分 |
支持所有 MySQL 4.1+ 功能 | 是 | 大部分 |
文本:“PDO 不允许您使用 MySQL 对多条语句的支持”已过时。
从 v5.3 开始,PHP 在 PDO 中引入了多条语句支持(通过 PDO_MYSQLND 驱动程序替换以前的 PDO_MYSQL)。