当我们告诉它不要这样做时,为什么 PDO 会生成警告?

gaR*_*Rex 5 php pdo mysqlnd

问题

我们告诉 PDO 将每个问题包装成异常。在某些情况下,它会生成一些警告,然后才抛出异常。

为什么这样做?

重复?

关于它没有关于 SO 的正确答案。最后一个问题是MySQL 上的 PHP PDO 异常 + 警告已经消失?但人们只是将其标记为重复而不是仔细回答。

接受的答案不回答为什么这样做以及何时这样做。所以我研究了一下,会回答的。

gaR*_*Rex 3

这是因为 PDO 可以使用 mysqlnd 驱动程序,该驱动程序不遵守任何 PDO 的“将问题转换为扩展”策略。

只需查看mysqlnd 驱动程序的来源即可。

我们清楚地看到有对 的直接调用php_error_docref

上一个问题中显示的示例之一由以下几行解释:https://github.com/php/php-src/blob/PHP-5.5.31/ext/mysqlnd/mysqlnd_wireprotocol.c#L35 :L61