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

时间:2019-04-03 02:02:46

标签: mysql sql phpmyadmin mysql-error-1054 php-mysqlidb

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

https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

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

enter image description here

现在我打电话给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)时,任何人都可以解释为什么吗?

3 个答案:

答案 0 :(得分:1)

如果您的数据属于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的一个引号和查询本身的另一个引号

答案 1 :(得分:0)

尝试在d上使用双引号。

CALL Scorer("d",2,5,7,38)

我认为这应该对您有所帮助。

答案 2 :(得分:0)

enter image description here

可能是因为“类型”参数的“选项”下的“字符”。是什么意思?