使用存储过程时where子句中的未知列'模板'

时间:2010-04-19 20:41:24

标签: mysql stored-procedures

我有一个存储过程,它已经执行但没有任何错误,但是当我运行它时,在“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手册,并且已经没有了!

任何帮助都会很棒!!感谢

1 个答案:

答案 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