我只是创建一个stored procedure Scorer其中parameter像这样

mysql - 字段列表MySql存储过程中的未知列-LMLPHP

这是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表的表结构

mysql - 字段列表MySql存储过程中的未知列-LMLPHP

现在,当我致电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的一个引号,查询本身的另一个引号

10-07 21:52