首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql准备语句

问mysql准备语句
EN

Stack Overflow用户
提问于 2011-07-20 05:25:37
回答 1查看 1.7K关注 0票数 3

我有一系列16条准备、执行和DEALLOCATE语句(在存储过程中),每一行插入一个不同的表(表1到table16)。例:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2017-04-22 19:53:15

在MySQL中,Prepare和Execute命令的组合应该与占位符一起使用--为您节省串接字符串的时间(可能您的其中一个串接错误了),当然--防止sql注入(耶!)

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

代码语言:javascript
复制
-- 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6757363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档