php中的Mysqlnd、PDO和PDO_Mysql扩展有啥区别?

Posted

技术标签:

【中文标题】php中的Mysqlnd、PDO和PDO_Mysql扩展有啥区别?【英文标题】:What is the difference between Mysqlnd, PDO and PDO_Mysql extensions in php?php中的Mysqlnd、PDO和PDO_Mysql扩展有什么区别? 【发布时间】:2017-06-08 08:02:08 【问题描述】:

它们看起来是一样的,但又是不同的。我不知道哪个是哪个:我知道我们可以使用 PDO 作为new PDO() 并使用prepare()query() 方法从数据库中获取数据。那么,如果这是扩展列表中提到的PDO,那么 pdo_mysql 和 mysqlnd 究竟是什么(通俗地说)是什么?

【问题讨论】:

另见:php.net/manual/en/mysqlinfo.api.choosing.php 和 php.net/manual/en/mysqlinfo.library.choosing.php 其实我已经看过了,只是我还是无法在他们三个之间建立联系(不是双关语) 认为(如果我错了,我相信有人会纠正我)mysqlnd 是将PHP 连接到mysql 的实际驱动程序。 PDO和mysqli是通过mysqlnd向mysql服务器发送数据的API。 在 PHP 中使用 PDO 需要 PDO 驱动程序,这就是 pdo_mysql。由于我们要使用 PDO 连接到一个 mysql db,我们还需要 mysql 驱动程序,这就是 mysqlnd 是什么。 听起来您可能不知道 PDO 可以用于许多不同的数据库,而不仅仅是 MySQL。您必须为要与 PDO 一起使用的每种数据库类型启用特定扩展(例如,用于 MySQL 的 pdo_mysql)。 【参考方案1】:

PDO 本身是 PHP 提供的database abstraction layer。这可能并不完全符合您的想法,但 PHP 在 the PDO documentation 中澄清了这一点:

PDO 提供了一个数据访问抽象层,这意味着,无论您使用哪个数据库,您都可以使用相同的函数来发出查询和获取数据。 PDO 不提供数据库抽象;它不会重写 SQL 或模拟缺失的功能。如果您需要该功能,您应该使用成熟的抽象层。

根据您的系统,you might need to enable its driver 才能使用它。 (但可能不会。)

您可以将 PDO 与各种不同的数据库(MySQL、Oracle、PostgreSQL 等)一起使用,但您需要enable the specific driver 来选择您想要使用的数据库类型。从我之前链接的同一个 PDO 介绍文档中:

请注意,您不能单独使用 PDO 扩展执行任何数据库功能;您必须使用特定于数据库的 PDO 驱动程序来访问数据库服务器。

pdo_mysql 就是其中之一。这些驱动程序实现 PDO 接口,这意味着它们允许您使用 prepare()query() 等。与您的特定数据库

mysqlnd 处理 PHP 和 MySQL 之间的通信。自 PHP 5.4 以来,它一直是所有 MySQL 扩展(如 pdo_mysql)的默认驱动程序,因此,如果您使用的是受支持的 PHP 版本,那么您可能正在使用它。但它在幕后工作,只是处理通信。您不会使用任何mysqlnd 函数。来自the mysqlnd documentation 的“它不是什么”部分:

虽然 MySQL Native Driver 是作为 PHP 扩展编写的,但需要注意的是,它并没有为 PHP 程序员提供新的 API。 MySQL 数据库连接的程序员 API 由 MySQL 扩展、mysqli 和 PDO MYSQL 提供。这些扩展现在可以使用 MySQL Native Driver 的服务与 MySQL 服务器进行通信。因此,您不应将 MySQL Native Driver 视为 API。

【讨论】:

【参考方案2】:

您需要 PDO_Mysql 才能使用带有 PDO 的 mysql 数据库。是司机。

Mysqld 是 Mysql 服务器,您可以使用 PDO 或 mysqli 访问它。

Mysqlnd 是与 Mysql 服务器通信的库/驱动程序,PDO 和 mysqli 都使用它。

【讨论】:

如果你要回答这个问题,那就做对吧。显示来自官方文档的引用。此外,OP 询问 mysqlnd - 而不是 mysqld。到目前为止,您所说的充其量只是微不足道的,可能只是评论。

以上是关于php中的Mysqlnd、PDO和PDO_Mysql扩展有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

怎么安装php的mysql扩展

PHP编译参数

PHP编译安装命令

编译安装php7.3

php编译参数

编译安装PHP5.5.32的配置文件