2

我正在发现 FlourishLib,我正在查看他们的 fDatabase.php 代码以了解他们如何处理 sql 查询,我真的很惊讶地发现,当您使用 MySQL 时,他们会禁用准备好的查询

$this->connection->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);

第 599 行

他们为什么这么做?

我习惯了 PDO.prepare & PDOStatement.execute,我想知道为什么会这样选择。

4

1 回答 1

1

很长一段时间以来,MySQL 服务器端准备好的语句都是理论上的性能损失和烦恼的根源。 这篇 2006 年的 MySQL 性能博客文章概述了大部分原因。需要注意的是查询缓存以及准备好的语句如何绕过它,准备参数执行周期的额外往返,以及可以和不能用作占位符值的更严格的标准。

从 MySQL 5.1.17 开始一些但不是所有准备好的语句现在可以使用查询缓存。其他小问题仍然存在。

值得知道的是,对于 PDO 如何执行准备好的语句,有两个控件。另一个叫做PDO::ATTR_EMULATE_PREPARES. 另请参阅:今年早些时候的这个不太受骗的问题

于 2012-11-05T20:28:54.623 回答