在MySQLi中使用预准备语句有什么好处?
如果唯一的目的是保护查询,那么使用mysqli_real_escape_string
之类的东西来清理查询不是更好,而不是为每个查询编写这么多行代码(比如prepare,bind_param,execute,close等)?
答案 0 :(得分:12)
准备语句不仅仅是为了代码安全性。它有助于SQL Server解析您的语句并为您的查询生成执行计划。
如果运行SELECT 1000次,则SQL服务器必须解析,准备并生成有关如何获取数据1000次的计划。
如果您准备一个语句然后使用不同的绑定值运行预准备语句1,000次,那么该语句只被解析一次,并且每次都使用相同的查询计划。
这不仅有助于在脚本中运行1,000个查询,而且如果您只有1个语句并运行脚本1,000次。服务器可以记住计划服务器端。下次运行脚本时,它将再次使用相同的计划。
当然,对于一两个查询看起来似乎微不足道,但是当您开始重复执行大量查询或同一查询时,您将节省大量处理时间。
答案 1 :(得分:9)
有几个优点:
WHERE $x = 4
,如果$x
为空,则会出现语法错误,但WHERE ? = 4
会有效。