mysql PREPARE语句

时间:2011-07-20 05:25:37

标签: mysql prepared-statement

我有一系列16个PREPARE,EXECUTE和DEALLOCATE语句(在存储过程中),每个语句都插入一个不同的表(表1到表16)。例如:

SET @Command1 = CONCAT("insert into TABLE1" ,  ...etc.. );
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

SET @Command1 = CONCAT("insert into TABLE2" ,  ...etc.. );
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

.
.
.

SET @Command1 = CONCAT("insert into TABLE16" ,  ...etc.. );
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

当我执行存储过程时,INSERT会间歇性地工作。有时候所有的16个插件都可以工作,但有时却没有。

在存储过程的最后一个CALL中,前两个插入(进入TABLE1和TABLE2)和后四个插入(表13到16)有效,但不是表3到表12中的插入。

你能解释一下原因吗?不能因为我使用相同的变量/句柄command1和stmt1?

1 个答案:

答案 0 :(得分:0)

在MySQL中,PrepareExecute命令的组合应该与占位符一起使用 - 节省你使用concat字符串的时间(可能你的一个concats出错了)当然 - 防止sql注入(是的!)

所以......只需像这样建立你的陈述:

-- in MySQL ? is a placeholder
set @sampleQuery = 'select name into @testValue from myTable where id = ?'; 
set @idParam = 'NT54X9';

prepare sampleStatement from @sampleQuery;
execute sampleStatement using @idParam; -- `using` is the key point here
deallocate prepare sampleStatement;

select @testValue