提问人:Manngo 提问时间:4/11/2017 最后编辑:CommunityManngo 更新时间:4/11/2017 访问量:367
PDO 预准备语句默认为仿真
PDO Prepared Statements defaulting to emulation
问:
我读过好几次,默认情况下,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 岁
- 链接已失效
- 评论中有一些异议。
这个问题并没有告诉我这实际上是在哪里记录的。
答: 暂无答案
评论