我有一个存储过程,它已经执行但没有任何错误,但是当我运行它时,在“where子句”中给出了一个错误“#1054:未知列'templateName'。
存储过程是:
delimiter //
DROP PROCEDURE `getData`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `getData`(IN templateName VARCHAR(45),IN templateVersion VARCHAR(45),IN userId VARCHAR(45))
BEGIN
set @version = CONCAT("SELECT 'saveOEMsData_answersVersion' FROM `saveOEMsData` where 'saveOEMsData_templateName' = ",templateName," and 'saveOEMsData_templateVersion' = ",templateVersion," and 'saveOEMsData_userId'= ",userId);
PREPARE s1 from @version;
EXECUTE S1;
END
//
delimiter ;
现在我使用call getData('templateName','1','285');
来调用它。每当我打电话给它时,我都会得到上述错误。问题是什么?它肯定是语法的,我已经阅读了2天的mysql手册,并且已经没有了!
任何帮助都会很棒!!感谢
答案 0 :(得分:1)
您将'templateName'作为字符串传递给过程,然后SQL的一部分
saveOEMsData_templateVersion = templateName
如果它应该是一个字符串值,那么引用它(仅相关部分)
...'saveOEMsData_templateVersion' = '",templateVersion,"'...
编辑: 正如我所说,将temmplateName(参数)放在引号(')中,对于组合SELECT中的字段名称,将它们保持为倾斜引号,如`
delimiter //
DROP PROCEDURE `getData`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `getData`(IN templateName VARCHAR(45),IN templateVersion VARCHAR(45),IN userId VARCHAR(45))
BEGIN
set @version = CONCAT("SELECT `saveOEMsData_answersVersion` FROM `saveOEMsData` WHERE `saveOEMsData_templateName` = '",templateName,"' AND `saveOEMsData_templateVersion` = ",templateVersion," AND `saveOEMsData_userId`= ",userId);
PREPARE s1 from @version;
EXECUTE S1;
END
//
delimiter ;
注意:希望您输入sanitizing。