我有一系列16条准备、执行和DEALLOCATE语句(在存储过程中),每一行插入一个不同的表(表1到table16)。例:
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;当我执行存储过程时,插入会间歇性地工作。有时所有16种插入都能工作,但有时它们不起作用。
在存储过程的最后一次调用中,前2个插入(进入TABLE1和TABLE2 )和最后4个插入(表13至16)工作,但对表3至12的插入不起作用。
你能解释一下为什么吗?不可能是因为我使用相同的变量/句柄command1和stmt1?
发布于 2017-04-22 19:53:15
在MySQL中,Prepare和Execute命令的组合应该与占位符一起使用--为您节省串接字符串的时间(可能您的其中一个串接错误了),当然--防止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 @testValuehttps://stackoverflow.com/questions/6757363
复制相似问题