PHP中Mysqlnd,PDO和PDO_Mysql扩展之间有什么区别?

ʎɹn*_*ɹǝW 1 php pdo php-extension php-internals mysqlnd

他们似乎是同一回事,但又有所不同。我不知道是哪一个:我知道我们可以将PDO用作,new PDO()并使用prepare()query()方法来从数据库中获取数据。因此,如果PDO在扩展列表中提到了这一点,那么pdo_mysql和mysqlnd到底是什么(用外行术语)?

Don*_*nic 5

PDO本身是PHP提供的数据库抽象层。这可能并不意味着您真正想的是什么,但是PHP在PDO文档中将清除了:

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

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

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

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

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

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

尽管MySQL本机驱动程序是作为PHP扩展编写的,但需要注意的是它没有为PHP程序员提供新的API。MySQL扩展,mysqli和PDO MYSQL提供了用于MySQL数据库连接的程序员API。这些扩展现在可以使用MySQL Native Driver的服务与MySQL Server通信。因此,您不应将MySQL本机驱动程序视为API。


Nat*_*tha 2

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

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

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

  • 如果您要回答这个问题,请正确回答。显示官方文档中的引用。另外,OP 询问“mysqlnd”,而不是“mysqld”。到目前为止,您所说的最多是边际的,并且可能只是一个评论。 (6认同)