Неизвестный столбец 'template' в предложении where при использовании хранимой процедуры - PullRequest
1 голос
/ 20 апреля 2010

У меня есть хранимая процедура, которая была выполнена без ошибок, но выдает ошибку "# 1054: Неизвестный столбец 'templateName' в предложении 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 Ответ

1 голос
/ 20 апреля 2010

Вы передаете 'templateName' как строку в процедуру, и тогда часть SQL будет

saveOEMsData_templateVersion = templateName

если предполагается, что это строковое значение, заключите его в кавычки (только соответствующая часть)

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

EDIT: Как я уже сказал, поместите 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 ;

Примечание: надеюсь, вы дезинфицируете ваши данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...