为什么MySQLi准备了语句?

问题描述 投票:6回答:2

与MySQLi一起使用预备语句有什么好处?

[如果唯一的目的是保护查询,那么使用mysqli_real_escape_string这样的查询来清理查询不是更好,而不是为每个查询编写那么多行代码(例如prepare,bind_param,execute,close等)。 ?

php mysqli prepared-statement
2个回答
12
投票

准备语句不仅是为了代码安全。它有助于SQL Server解析您的语句并为查询生成执行计划。

如果您运行SELECT 1000次,则SQL Server将必须解析,准备并生成有关如何获取1000次数据的计划。

[如果您准备一条语句,然后以不同的绑定值运行准备的语句1000次,则该语句仅被解析一次,并且每次都使用相同的查询计划。

这不仅在您在脚本中运行1,000个查询时有所帮助,而且如果您只有1条语句并运行该脚本1,000次,也有帮助。服务器可以记住计划服务器端。下次您的脚本运行时,它将再次使用相同的计划。

当然,对于一个或两个查询来说,这似乎是微不足道的,但是当您开始重复执行大量查询或同一查询时,将节省大量处理时间。


10
投票

有几个优点:

  • 安全性-您不需要转义任何内容,只需要绑定参数。
  • 正确性-如果您写入WHERE $x = 4,如果$x为空,则将出现语法错误,但是WHERE ? = 4可以使用。
  • 性能-可以使用不同的参数重用准备好的查询,节省重建字符串的时间,也可以在服务器上重新分析。
  • 可维护性-代码更易于阅读。将字符串连接起来以创建SQL时,很容易将许多小段SQL和PHP代码混合在一起。使用准备好的语句鼓励您将SQL与确定变量的值分开。
© www.soinside.com 2019 - 2024. All rights reserved.