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