首页  >  文章  >  数据库  >  托管环境中的单执行查询是否应该避免使用准备好的语句?

托管环境中的单执行查询是否应该避免使用准备好的语句?

Susan Sarandon
Susan Sarandon原创
2024-11-02 00:10:02925浏览

 Should Prepared Statements Be Avoided for Single-Execution Queries in a Hosted Environment?

何时避免使用预准备语句

防止 SQL 注入攻击的常见做法是使用预准备语句。但是,在某些情况下,准备好的语句可能不是最合适的选项。

在这种特定情况下,开发人员正在重新设计一个使用基本查询(例如 SELECT foo,bar FROM baz WHERE quux)的 Web 应用程序= ? ORDER BY bar LIMIT 1. 这些查询仅在每个页面点击时执行一次。此外,开发人员处于托管环境中,希望避免额外的服务器负载。

考虑到这些因素,开发人员质疑是否有必要使用准备好的语句。

答案

要确定是否应该避免准备好的语句,必须考虑准备好的语句提供两个主要好处:

  • 注入预防:准备好的语句可以防止 SQL 注入通过将参数与查询分开绑定来进行攻击,确保用户输入无法修改查询结构。
  • 查询重用:准备好的语句可以使用不同的参数执行多次,而无需重新编译查询,提高性能。

在这种特定场景中,开发人员不关心查询重用,因为每个查询仅在每次页面点击时执行一次。因此,查询重用的性能优势可以忽略不计。

但是,注入预防方面仍然是一个问题。为了解决这个问题,开发人员可以考虑使用模拟准备语句。这些语句使用 PHP 函数来处理引用和参数替换,提供针对 SQL 注入的保护,而无需多次数据库往返的开销。

建议

基于信息不过,建议避免使用准备好的语句,而是选择模拟的准备好的语句。这种方法提供了针对 SQL 注入的保护,同时避免了真正准备好的语句会产生的额外数据库往返。

以上是托管环境中的单执行查询是否应该避免使用准备好的语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn