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)
你的问题无疑出在这里:
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)
| 归档时间: |
|
| 查看次数: |
562 次 |
| 最近记录: |