为什么Flourishlib fDatabase禁用准备好的查询?

问题描述 投票:2回答:1

[我发现了FlourishLib,我正在查看他们的fDatabase.php代码,以了解它们如何处理sql查询,当我使用MySQL时,它们禁用了已准备好的查询,我感到非常惊讶

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

line 599

他们为什么这样做?

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

php mysql prepared-statement flourishlib
1个回答
1
投票

很长一段时间以来,MySQL服务器端准备好的语句一直是理论上的性能损失和烦恼的来源。 This MySQL Performance Blog post from 2006概述了大多数原因。需要注意的是查询缓存以及准备好的语句如何绕过查询,为prepare-params-execute循环进行了额外的往返,并针对可以用作和不能用作占位符值的条件制定了更严格的标准。

Starting with MySQL 5.1.17some,但现在并非所有准备好的语句都可以使用查询缓存。其他小问题仍然存在。

值得一提的是,对于PDO如何准备语句,有two控件。另一个称为PDO::ATTR_EMULATE_PREPARES。另请参阅:this not-quite-dupe question from earlier this year

© www.soinside.com 2019 - 2024. All rights reserved.