如果我没有弄错,准备好的语句会更快,因为它们只是第一次发送到RDBMS,然后只有在需要执行时才会发送参数。
在使用Doctrine2的DBAL时,或者仅在瓶颈中,我是否应始终使用预准备语句?我可以准备好的陈述数量是否有限制?
Doctrine2的ORM怎么样?它默认使用普通查询还是预处理语句?
答案 0 :(得分:1)
关于性能,几乎不会出现一个脚本多次运行查询的情况。因此,准备好的声明“更快”的好处几乎不存在。
不允许SQL注入的预准备语句的好处也不太正确。准备好的陈述在动态查询的可能性方面存在一些限制,并且它们本身不能抵抗注射。你可以做更少的坏事,但不能做零。
每当试图优化事物时:测量。并首先优化正确的事情。例如,如果查询速度较慢,则应首先检查其执行计划,并查看是否正确使用了所有索引。从非准备语言转换为准备语句不会发生太大变化。
答案 1 :(得分:0)
建议始终为所有数据库服务器使用准备好的(或至少参数化的)语句,不仅仅是为了提高速度,还因为它有助于防止SQL注入攻击。