我正在发现 FlourishLib,我正在查看他们的 fDatabase.php 代码以了解他们如何处理 sql 查询,我真的很惊讶地发现,当您使用 MySQL 时,他们会禁用准备好的查询
$this->connection->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);
(第 599 行)
他们为什么这么做?
我习惯了 PDO.prepare & PDOStatement.execute,我想知道为什么会这样选择。
我正在发现 FlourishLib,我正在查看他们的 fDatabase.php 代码以了解他们如何处理 sql 查询,我真的很惊讶地发现,当您使用 MySQL 时,他们会禁用准备好的查询
$this->connection->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);
(第 599 行)
他们为什么这么做?
我习惯了 PDO.prepare & PDOStatement.execute,我想知道为什么会这样选择。
很长一段时间以来,MySQL 服务器端准备好的语句都是理论上的性能损失和烦恼的根源。 这篇 2006 年的 MySQL 性能博客文章概述了大部分原因。需要注意的是查询缓存以及准备好的语句如何绕过它,准备参数执行周期的额外往返,以及可以和不能用作占位符值的更严格的标准。
从 MySQL 5.1.17 开始,一些但不是所有准备好的语句现在可以使用查询缓存。其他小问题仍然存在。
值得知道的是,对于 PDO 如何执行准备好的语句,有两个控件。另一个叫做PDO::ATTR_EMULATE_PREPARES
. 另请参阅:今年早些时候的这个不太受骗的问题。