Mysql 用于登录身份验证的存储过程不起作用
我正在使用Mysql 用于登录身份验证的存储过程不起作用,mysql,stored-procedures,cursor,Mysql,Stored Procedures,Cursor,我正在使用MySQL数据库中的存储过程进行登录身份验证。 下面是代码,我写的,但它不工作。让我知道,怎么了 我有以下问题 如何检查光标是否为空或空 有没有办法,我们来写程序 我正在做的。。 获取两个输入参数和两个输出参数 检查用户或密码是否无效,并将这些值存储在OUT参数中 在oMessage、USERID中选择“无效用户名和密码”、“空” 如果用户和密码有效,但isActive列为0,则 在oMessage、USERID中选择“非活动帐户”、“空” 如果成功, 选择“Success”,将Use
MySQL
数据库中的存储过程进行登录身份验证。
下面是代码,我写的,但它不工作。让我知道,怎么了
我有以下问题
如何检查光标
是否为空
或空
有没有办法,我们来写程序
我正在做的。。
获取两个输入
参数和两个输出
参数
检查用户或密码是否无效,并将这些值存储在OUT参数中
在oMessage、USERID中选择“无效用户名和密码”、“空”代码>
如果用户和密码有效,但isActive
列为0
,则
在oMessage、USERID中选择“非活动帐户”、“空”代码>
如果成功,
选择“Success”,将UserID添加到oMessage、UserID中代码>
SQL代码
你绝对不需要光标
s;使用简单的选择。SP的更简洁版本可能如下所示
DELIMITER $$
CREATE DEFINER = `FreeUser`@`localhost` PROCEDURE `acl`.`checkAuthenticationTwo`
(
IN iUsername VARCHAR(50),
IN iPassword VARCHAR(50),
OUT oMessage VARCHAR(50),
OUT oUserID INT
)
BEGIN
SELECT CASE WHEN IsActive = 0 THEN 'Inactive account' ELSE 'Success' END,
CASE WHEN IsActive = 0 THEN NULL ELSE UserID END
INTO oMessage, oUserID
FROM m_users
WHERE (LoginName = TRIM(iUsername)
OR Email = TRIM(iUsername))
AND `Password` = iPassword
LIMIT 1; -- you better protect yourself from duplicates
SET oMessage = IFNULL(oMessage, 'Invalid username and password');
END$$
DELIMITER ;
它尝试选择一行,其中username或email等于iUsername,password等于iPassword,并向输出变量输出两个值。在此过程中,它使用CASE
查看isActive值。如果是0
,则将消息设置为“非活动”,并将userid设置为NULL。否则,它将返回“Success”消息和已找到的真实用户ID。现在,如果未找到用户,则两个变量都将设置为NULL。我们可以利用这一点,使用IFNULL()
函数来检测这一事实,并将消息设置为“无效用户名和密码”
这里是演示
就我个人而言,我会进一步简化它,使其成为一个单语句SP,并具有以下界面:
Returns:
userid (which is > 0) if a user with username and password if found
0 - username and(or) password incorrect
-1 - a user is inactive
这里是演示你肯定不需要光标
s;使用简单的选择。SP的更简洁版本可能如下所示
DELIMITER $$
CREATE DEFINER = `FreeUser`@`localhost` PROCEDURE `acl`.`checkAuthenticationTwo`
(
IN iUsername VARCHAR(50),
IN iPassword VARCHAR(50),
OUT oMessage VARCHAR(50),
OUT oUserID INT
)
BEGIN
SELECT CASE WHEN IsActive = 0 THEN 'Inactive account' ELSE 'Success' END,
CASE WHEN IsActive = 0 THEN NULL ELSE UserID END
INTO oMessage, oUserID
FROM m_users
WHERE (LoginName = TRIM(iUsername)
OR Email = TRIM(iUsername))
AND `Password` = iPassword
LIMIT 1; -- you better protect yourself from duplicates
SET oMessage = IFNULL(oMessage, 'Invalid username and password');
END$$
DELIMITER ;
它尝试选择一行,其中username或email等于iUsername,password等于iPassword,并向输出变量输出两个值。在此过程中,它使用CASE
查看isActive值。如果是0
,则将消息设置为“非活动”,并将userid设置为NULL。否则,它将返回“Success”消息和已找到的真实用户ID。现在,如果未找到用户,则两个变量都将设置为NULL。我们可以利用这一点,使用IFNULL()
函数来检测这一事实,并将消息设置为“无效用户名和密码”
这里是演示
就我个人而言,我会进一步简化它,使其成为一个单语句SP,并具有以下界面:
Returns:
userid (which is > 0) if a user with username and password if found
0 - username and(or) password incorrect
-1 - a user is inactive
这里是演示