关于使用PDO::prepare
的好处已经写了很多,但很少有关于使用PDO::query
的好处的文章。我认为PDO::query
是为了达到目的而创建的,并且在PDO::prepare
上使用此函数应该有一些相对优势。
我的查询是这样的:
SELECT * from Table ORDER BY id DESC LIMIT 100;
此查询不包含用于转义的用户输入,也不包含用于重复查询的变量。我应该使用PDO::query
,在这种情况下,请回到mysqli_query
或坚持PDO::prepare
吗?
更新:对常规查询日志的进一步检查显示PDO::prepare
和PDO::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
似乎也会生成准备好的语句。
答案 0 :(得分:2)
如果您只需要一次,那么创建预准备语句是没有意义的(除非模拟将导致两次网络传输到数据库)。当没有可变参数被绑定时,情况就更少了。
PDO::query
与利益无关。它的使用伴随着没有任何。一次性查询无法从准备好的陈述的潜在速度优势中受益。
答案 1 :(得分:2)
我想我完全错过了它。它在PDO::query
的PHP手册中指出:
PDOStatement PDO::query ( string $statement )
准备和执行的SQL语句。
这意味着SQL语句是使用PDO::query
甚至准备的。因此,除了在PHP脚本上保存一行或两行外,使用PDO::query
绝对没有优势。这可以通过上面问题中显示的常规查询日志进行验证。