MySQL 存储过程没有返回正确的结果

T V*_*cor 2 mysql sql stored-procedures

我有一个存储过程,用于检查用户是否已经存在,无论它使用数据库中的第一行返回的电子邮件使用什么输入。如果我手动运行 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
Run Code Online (Sandbox Code Playgroud)

And*_*ber 5

你的问题无疑出在这里:

SELECT `User ID` INTO User_ID FROM `Users` WHERE `Email` = Email LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

一点; 您的参数名称与列名称相同。这实际上可以奏效,但实现它的规则可能很奇怪。(我想如果你改变引号,它可能会起作用)。

但实际上,您应该做的是将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
Run Code Online (Sandbox Code Playgroud)