为什么MySQLi准备好了声明?

Jay*_*Jay 6 mysqli

使用MySQLi准备好的语句有什么好处?

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

bot*_*403 12

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

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

如果您准备一个语句然后使用不同的绑定值运行预准备语句1,000次,那么该语句只会被解析一次,并且每次都使用相同的查询计划.

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

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


Mar*_*ers 9

有几个优点:

  • 安全性 - 您不需要转义任何东西,只需要绑定参数即可.
  • 正确性 - 如果你写的WHERE $x = 4话,如果$x为null,你会得到语法错误,但是WHERE ? = 4会有效.
  • 性能准备好的查询可以使用不同的参数重用,从而节省了重建字符串,并且还可以在服务器上进行重新分析.
  • 可维护性 - 代码更容易阅读.当连接字符串以创建SQL时,很容易最终得到大量的小块SQL和PHP代码混合在一起.使用预准备语句可以鼓励您将SQL与确定变量值分开.