我有一个存储过程,它检查用户是否已经存在,无论用于电子邮件的输入是什么,它随数据库的第一行一起返回。如果我手动运行select语句,我将得到正确的结果。有什么建议吗?
CREATE DEFINER=`myusername`@`localhost` PROCEDURE `User_Auth`(IN `Email` VARCHAR(30)) BEGIN DECLARE User_ID INT(30); SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = Email LIMIT 1; IF (User_ID > 0) THEN SELECT * FROM `Users` WHERE `User ID` = User_ID; ELSE SELECT concat('No Users Found: ', Customer_Name); END IF; END
您的问题无疑在这里:
SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = Email LIMIT 1;
白衣 您的参数名称与列名称相同。这 可 实际工作,但规则使它这样做可能是怪异。(我认为,如果您更改引号,它可能会起作用)。
但是实际上,您应该做的是将Email参数重命名为其他名称:
Email
CREATE DEFINER=`myusername`@`localhost` PROCEDURE `User_Auth`(IN `EmailAddress` VARCHAR(30)) BEGIN DECLARE User_ID INT(30); SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = EmailAddress LIMIT 1; IF (User_ID > 0) THEN SELECT * FROM `Users` WHERE `User ID` = User_ID; ELSE SELECT concat('No Users Found: ', Customer_Name); END IF; END