我只是创建一个stored procedure
Scorer
其中parameter
像这样
这是Stored procedure
的定义
BEGIN
set @inser = CONCAT('INSERT INTO activity8',' (ActivityType,ActivityChapter,ActivitySubject,ActivityClass,Student) VALUES (',Type,',',Chapter,',',Subject,',',Class,',',Student,')');
prepare stmt from @inser;
execute stmt ;
End
这是activity8表的表结构
现在,当我致电
CALL Scorer('d',2,5,7,38)
为什么给出错误
#1054 - Unknown column 'd' in 'field list'
编辑
当我做
CALL Scorer('"d"',2,5,7,38)
或CALL Scorer("'d'",2,5,7,38)
时,它能很好地工作吗,有人可以解释为什么吗? 最佳答案
如果您的数据属于varchar
类型,并且您正在使用CONCAT
来构建查询,那么它将不能使用单引号,因为当您这样做时已经看到了
set @inser = CONCAT('INSERT INTO activity8',' (ActivityType,ActivityChapter,ActivitySubject,ActivityClass,Student) VALUES (',Type,',',Chapter,',',Subject,',',Class,',',Student,')');
当你做
CALL Scorer('d',2,5,7,38);
这意味着您的查询是
@inser = INSERT INTO activity8 (ActivityType,ActivityChapter,ActivitySubject,ActivityClass,Student) VALUES
(d,2,5,7,38)
这是您的查询在这里,您的
varchar
类型值d
不带引号因此
CONCAT
本身消耗了一个引号您何时准备陈述
prepare stmt from @inser;
execute stmt ;
您的
varchar
值'd'
将不带引号因此您必须像这样将
varchar paramter
放入"'d'" or '"d"'
concat
的一个引号,查询本身的另一个引号