我发现了FlourishLib,我查看了他们的fDatabase.php代码,看看他们是如何处理sql查询的,我真的很惊讶地发现,当您使用MySQL时,他们禁用了准备好的查询。
$this->connection->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);(line 599)
他们为什么要这么做?
我习惯了PDO.prepare & PDOStatement.execute,我想知道为什么会选择这种选择。
发布于 2012-11-06 04:28:55
在很长一段时间内,MySQL服务器端的预准备语句在理论上都是性能上的问题,也是恼人的原因。This MySQL Performance Blog post from 2006概述了大部分原因。需要注意的是查询缓存以及准备好的语句如何绕过它,准备-参数-执行循环的额外往返,以及可以和不能用作占位符值的更严格的标准。
Starting with MySQL 5.1.17,一些但不是所有的预准备语句现在都可以使用查询缓存。其他次要的问题仍然存在。
值得一提的是,PDO如何处理预准备语句有两个控制。另一种称为PDO::ATTR_EMULATE_PREPARES。另请参阅:this not-quite-dupe question from earlier this year。
https://stackoverflow.com/questions/13238911
复制相似问题