我有一系列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?
答案 0 :(得分:0)
在MySQL中,Prepare
和Execute
命令的组合应该与占位符一起使用 - 节省你使用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