2010-04-19 24 views
1

我有一個存儲過程,它已經被執行而沒有任何錯誤,但給了我一個錯誤「#1054:未知列'templateName'where子句」何時我運行它。使用存儲過程時where子句中的未知列'模板'

存儲過程是:

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');。每當我打電話時,我都會遇到提及的錯誤。問題是什麼?它肯定是語法的,我一直在閱讀mysql手冊2天,並沒有出來!

任何幫助將是偉大的!由於

回答

1

您通過「TEMPLATENAME」作爲字符串的程序和SQL的部分則

saveOEMsData_templateVersion = templateName 

如果被認爲是再一個字符串值引用它(只有相關的部分)

...'saveOEMsData_templateVersion' = '",templateVersion,"'... 

編輯: 正如我所說的,放在引號temmplateName(參數)('),並在由字段名選擇讓他們在斜引號像`

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你的意見。

+0

ok我必須使用正在使用select語句進行retreived的「saveOEMsData_answersVersion」的值。我必須將它用於IF LOOP,這怎麼可能? \t組@version = CONCAT( 「選擇 'saveOEMsData_answersVersion' FROM'saveOEMsData'其中saveOEMsData_templateName = '」,TEMPLATENAME, 「' 和saveOEMsData_templateVersion =」,templateVersion 「和saveOEMsData_userId =」,用戶id, 「GROUP BY'saveOEMsData_templateName'」 ); \t從@version準備S1; \t EXECUTE S1; \t IF(S1 == 1)THEN select'one'; \t否則選擇'零'; \t END IF; 我收到錯誤時,我這樣做? – sai 2010-04-19 21:46:36

+0

你正在混合你的報價;我更新了答案,清理了我能看到的東西。嘗試理解過程的語法並通過更簡單的示例進行工作。 – Unreason 2010-04-19 23:00:55