我什么时候使用PDO :: query?

时间:2011-12-01 04:23:29

标签: php mysql pdo

关于使用PDO::prepare的好处已经写了很多,但很少有关于使用PDO::query的好处的文章。我认为PDO::query是为了达到目的而创建的,并且在PDO::prepare上使用此函数应该有一些相对优势。

我的查询是这样的:

SELECT * from Table ORDER BY id DESC LIMIT 100;

此查询不包含用于转义的用户输入,也不包含用于重复查询的变量。我应该使用PDO::query,在这种情况下,请回到mysqli_query或坚持PDO::prepare吗?

更新:对常规查询日志的进一步检查显示PDO::preparePDO::query

22 Connect user@localhost on Database
22 Prepare SELECT * from Table ORDER BY id DESC LIMIT 100
22 Execute SELECT * from Table ORDER BY id DESC LIMIT 100
22 Close stmt   
22 Quit

我期待PDO::query能够产生:

22 Connect user@localhost on Database
22 Query SELECT * from Table ORDER BY id DESC LIMIT 100
22 Quit

但这只发生在setAttribute(PDO::ATTR_EMULATE_PREPARES, true)时。我对得到的结果感到非常惊讶。 PDO::query似乎也会生成准备好的语句。

2 个答案:

答案 0 :(得分:2)

如果您只需要一次,那么创建预准备语句是没有意义的(除非模拟将导致两次网络传输到数据库)。当没有可变参数被绑定时,情况就更少了。

PDO::query与利益无关。它的使用伴随着没有任何。一次性查询无法从准备好的陈述的潜在速度优势中受益。

答案 1 :(得分:2)

我想我完全错过了它。它在PDO::query的PHP手册中指出:

PDOStatement PDO::query ( string $statement )

参数

语句

  

准备和执行的SQL语句。

这意味着SQL语句是使用PDO::query 甚至准备的。因此,除了在PHP脚本上保存一行或两行外,使用PDO::query绝对没有优势。这可以通过上面问题中显示的常规查询日志进行验证。

相关问题