我有一个MySQL存储过程,它有三个参数。
$stmt=$db->prepare("CALL MyStoredProce(?,?,?)");
$stmt->bind_param('iss',$id,$category,$name);
在一种情况下,只有一个参数正在改变。我可以进行部分准备(中间参数在此准备中将保持不变):
$stmt=$db->prepare("CALL MyStoredProc(?,'CARS',?)");
$stmt->bind_param('is',$id,$name);
对于DBMS来说,准备一些参数变化较小的语句可能会有一些好处吗?
答案 0 :(得分:1)
prepare
操作会创建一个“执行计划”,这是引擎实际执行的一系列操作。这种需要只发生一次,无论随后执行该语句多少次。
(EXPLAIN
动词会以准可读的形式打印出这个执行计划。相当有趣......)
因为SQL包含三个?
占位符,所以执行计划规定在执行语句时必须提供三个参数。
“绑定”是指定哪些值与所需的每个参数相关联的过程,每次执行准备好的语句时都会发生这种情况。它什么都没有使用prepare
步骤。
顺便说一句:在这种情况下,SQL查询包含对存储过程的调用,这无关紧要。我所说的内容适用于任何SQL语句。