php中的Mysqlnd,PDO和PDO_Mysql扩展有什么区别?

时间:2017-01-23 17:56:53

标签: php pdo php-extension php-internals mysqlnd

他们似乎是同一件事,但却不同。我不知道哪个是哪个:我知道我们可以将PDO用作new PDO()并使用prepare()query()方法从数据库中获取数据。那么,如果这是扩展名单中提到的PDO,那么究竟是什么(用非专业术语来说)是pdo_mysql和mysqlnd?

2 个答案:

答案 0 :(得分:4)

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 Server进行通信。因此,您不应将MySQL Native Driver视为API。

答案 1 :(得分:-1)

您需要PDO_Mysql才能在PDO中使用mysql数据库。这是司机。

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

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