PDO 预准备语句默认为仿真

PDO Prepared Statements defaulting to emulation

提问人:Manngo 提问时间:4/11/2017 最后编辑:CommunityManngo 更新时间:4/11/2017 访问量:367

问:

我读过好几次,默认情况下,PDO 不使用本机预处理语句,而是更喜欢模拟它们。若要启用真正的预准备语句,可以添加:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

我还读到MySQL是这种情况,但PostgreSQL不是。

我真正期望读到的一个地方是PHP的网站,但我发现根本没有提到它。

我能找到的最接近这一点的是 http://php.net/manual/en/pdo.prepare.php

PDO 将为本机不支持它们的驱动程序模拟准备好的语句/绑定参数,并且还可以将命名或问号样式的参数标记重写为更合适的内容(如果驱动程序支持一种样式而不支持另一种样式)。

http://www.php.net/manual/en/ref.pdo-mysql.php 中,它说:

PDO_MYSQL将利用 MySQL 4.1 及更高版本中存在的本机预准备语句支持。如果您使用的是旧版本的 mysql 客户端库,PDO 将为您模拟它们。

就我个人而言,我更喜欢使用真正的准备好的语句,所以这很容易修复,尤其是在 2017 年,数据库支持非常好。

问题是:哪里记录了 PDO 默认为模拟准备?另外,这是否适用于所有数据库或某些数据库?

注意:默认情况下,PDO是否始终使用模拟的预准备语句?中存在一个问题。这不是重复的(我已经读过了):

  • 问题是 5 岁
  • 链接已失效
  • 评论中有一些异议。

这个问题并没有告诉我这实际上是在哪里记录的。

php pdo 准备语句

评论

0赞 junkfoodjunkie 4/11/2017
这取决于数据库驱动程序 - PDO 只是您正在使用的任何数据库驱动程序的包装器。是的,它默认在 MYSQL 上模拟准备,除非 MYSQL 在 X 版本上运行>。由于有一些关于在较新版本的 MYSQL 上没有使用适当的准备语句的报道,因此无论如何都要为它添加 setAttribute,以强制它使用适当的准备。它在 PDO 的任何地方都没有真正记录,因为它与 PDO 无关,而是与当前的驱动程序有关。如果驱动程序支持它,它将使用适当的准备工作。

答: 暂无答案