【问题标题】:What is the difference between the nd_pdo_mysql and pdo_mysql extensions?nd_pdo_mysql 和 pdo_mysql 扩展有什么区别?
【发布时间】:2018-03-06 23:50:35
【问题描述】:

由于某种原因,我们托管服务器上的 pdo_mysql PHP 扩展无法运行使用 MySQL 视图的查询,并显示此错误消息。

SQLSTATE[HY000]: 一般错误:1615 Prepared statement需要重新准备

Bug #42041 Prepared-Statement fails when MySQL-Server under load 上有讨论,Stack Overflow 上有很多问题。)

由于某种原因,使用视图的查询运行良好,如果我们切换到使用 nd_pdo_mysql 扩展,这是 MySQL 原生驱动程序 (mysqlnd)。

pdo_mysqlnd_pdo_mysql有什么区别?为什么会选择一个而不是另一个?

谢谢。

【问题讨论】:

  • @HaydenSchiff,谢谢,但链接的文章似乎与 pdo 驱动程序无关。关于 pdo_mysql 和 nd_pdo_mysql 驱动程序之间的差异还有更多帮助吗?
  • 我不熟悉术语“nd_pdo_mysql”。后端库通常编译成 PHP,它不是你可以在运行时选择的东西。你在使用一些第三方 PHP 发行版吗?
  • 致谷歌用户:nd_pdo_mysql 似乎是cPanel 托管平台提供的自定义可插入扩展,以便在运行时选择加入 MySQL 本机驱动程序。在常规 PHP 设置中,MySQL 驱动程序在 compile time 中选择,之后无法更改,因此 pdo_mysql 是唯一可用的扩展名,并不暗示驱动程序的任何内容。

标签: php mysql pdo


【解决方案1】:

要从 PHP 连接到您的 MySQL 服务器,有两个版本的驱动程序:

  1. mysqlnd
  2. libmysql

为了使用 mysqlnd 驱动程序连接到您的 MySQL 服务器,您使用 nd_pdo_mysql 扩展名,如下面的屏幕截图所示。

由于libmysql 将数字类型作为字符串返回,我将mysqlndnd_pdo_mysql 一起使用以获取本机/严格数据,因此数字类型返回为字符串。 p>

来自 MySQL 官网: https://dev.mysql.com/downloads/connector/php-mysqlnd/

PHP 的 MySQL 原生驱动程序 mysqlnd 是 PHP 脚本语言的 MySQL 客户端库 libmysql 的直接替代品。

【讨论】:

  • > 由于 libmysql 将数字类型作为字符串返回,我将 mysqlnd 与 nd_pdo_mysql 一起使用以获取本机/严格数据,因此数字类型不会作为字符串返回。 ----- 我没有在其他地方找到此信息,现在很高兴了解为什么人们会选择使用 nd_pdo_mysql 而不是 pdo_mysql。谢谢。
  • 这个截图属于什么软件?
  • 来自cPanel
  • 非常有帮助的答案,也不要忘记在 PDO 选项中设置 PDO::ATTR_EMULATE_PREPARES = false 和 PDO::ATTR_STRINGIFY_FETCHES = false
猜你喜欢
  • 2017-06-08
  • 2012-08-11
  • 1970-01-01
  • 2020-06-17
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
相关资源
最近更新 更多