默认为模拟的 PDO 准备语句

Man*_*ngo 6 php pdo prepared-statement

我已经多次读到,默认情况下,PDO 不使用本机准备好的语句,而是更喜欢模拟它们。要启用真正的准备好的语句,您可以添加:

\n\n
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还读到 MySQL 是这样,但 PostgreSQL 不是这样。

\n\n

我真正希望阅读的一个地方是 PHP\xe2\x80\x99s 网站,但我发现根本没有提及它。

\n\n

我能找到的最接近的是来自http://php.net/manual/en/pdo.prepare.php

\n\n
\n

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

\n
\n\n

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

\n\n
\n

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

\n
\n\n

就我个人而言,我更喜欢使用真正的准备好的语句,这样 \xe2\x80\x99s 就很容易修复,尤其是在数据库支持相当好的 2017 年。

\n\n

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

\n\n

注意:存在一个问题:默认情况下 PDO 总是使用模拟的准备好的语句吗?。这不是重复的(我已经读过):

\n\n
    \n
  • 这个问题已经5年了
  • \n
  • 链接已失效
  • \n
  • 评论中有一些不同意见。
  • \n
\n\n

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

\n