PDO 参数化与非参数化查询速度

Posted

技术标签:

【中文标题】PDO 参数化与非参数化查询速度【英文标题】:PDO parameterized vs non-parameterized query speed 【发布时间】:2014-06-04 17:49:28 【问题描述】:

根据我最近几个月对 php-PDO 的使用,我了解到您可以执行 PREPARE 语句,然后运行查询。事实上,如果我要在复杂的连接上选择 SELECT,改变 where 条件,重复次数,我可以看到它的用处。

或者,类似地,如果我想插入多条记录。

但是,如果我知道我只想运行一次语句,我不应该只执行查询吗?我基本上是在查询数据库两次。

【问题讨论】:

【参考方案1】:

这取决于您是否有任何输入需要转义以防止 sql 注入。

根据PDO::quote上的手册:

如果你使用这个函数来构建 SQL 语句,你就是 强烈推荐使用 PDO::prepare() 来准备 SQL 语句 使用绑定参数而不是使用 PDO::quote() 进行插值 用户输入到 SQL 语句中。带绑定的预处理语句 参数不仅更便携,更方便,不受 SQL 的影响 注入,但执行起来通常比插值快得多 查询,因为服务器端和客户端都可以缓存已编译的表单 查询。

【讨论】:

来吧,你没看到那里写的完全是垃圾吗? @YourCommonSense 你指的是手册还是我的回答:-) 你的答案不多。但是这个“快得多”和“可以缓存”的东西……【参考方案2】:

这里是基准测试:http://jnrbsn.com/2010/06/mysqli-vs-pdo-benchmarks

就减速而言,准备好的报表接近误差范围,因此在大多数情况下可以认为是微不足道的。

【讨论】:

以上是关于PDO 参数化与非参数化查询速度的主要内容,如果未能解决你的问题,请参考以下文章

参数化 PDO 查询和“LIMIT”子句 - 不起作用 [重复]

如何正确使用 PDO 对象进行参数化 SELECT 查询

PDO 参数化查询的工作方式

使用 PDO 准备参数化查询

在带有 PDO 的 PHP 中,如何检查最终的 SQL 参数化查询? [复制]

在带有 PDO 的 PHP 中,如何检查最终的 SQL 参数化查询? [复制]