部分准备存储过程

时间:2016-07-26 11:59:07

标签: php mysql database prepared-statement

我有一个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来说,准备一些参数变化较小的语句可能会有一些好处吗?

1 个答案:

答案 0 :(得分:1)

prepare操作会创建一个“执行计划”,这是引擎实际执行的一系列操作。这种需要只发生一次,无论随后执行该语句多少次。

EXPLAIN动词会以准可读的形式打印出这个执行计划。相当有趣......)

因为SQL包含三个?占位符,所以执行计划规定在执行语句时必须提供三个参数。

“绑定”是指定哪些值与所需的每个参数相关联的过程,每次执行准备好的语句时都会发生这种情况。它什么都没有使用prepare步骤。

顺便说一句:在这种情况下,SQL查询包含对存储过程的调用,这无关紧要。我所说的内容适用于任何SQL语句。