7

它们似乎是同一件事,但又是不同的。我不知道哪个是哪个:我知道我们可以使用 PDO asnew PDO()和 use prepare()andquery()方法从数据库中获取数据。那么,如果PDO扩展列表中提到了这一点,那么 pdo_mysql 和 mysqlnd 究竟是什么(通俗地说)是什么?

4

2 回答 2

11

PDO 本身是PHP 提供的数据库抽象层。这可能并不完全符合您的想法,但 PHP 在PDO 文档中明确了这一点:

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

根据您的系统,可能需要先启用其驱动程序才能使用它。(但可能不是。)

您可以将 PDO 与各种不同的数据库(MySQL、Oracle、PostgreSQL 等)一起使用,但您需要为要使用的数据库类型启用特定的驱动程序。从我之前链接的同一个 PDO 介绍文档中:

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

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

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

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

于 2017-01-23T18:56:10.743 回答
1

您需要 PDO_Mysql 才能将 mysql 数据库与 PDO 一起使用。是司机。

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

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

于 2017-01-23T18:02:01.857 回答