mysql存储过程登录
我使用的是mysql,有一个登录认证的过程mysql存储过程登录,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我使用的是mysql,有一个登录认证的过程 CREATE PROCEDURE CheckPassword (IN username CHAR(8),IN password_p VARCHAR(20), OUT yes_no char(1)) BEGIN IF EXISTS(SELECT * FROM USER WHERE USER_ID = username AND password = password_p) then set yes_no = '0';
CREATE PROCEDURE CheckPassword (IN username CHAR(8),IN password_p VARCHAR(20), OUT yes_no char(1))
BEGIN
IF EXISTS(SELECT * FROM USER WHERE USER_ID = username AND password = password_p) then
set yes_no = '0';
ELSE
set yes_no = '1';
END IF;
END;
但它警告说,在创建过程时出错,它说第4行有错误,这是“set yes_no='0';”的行?我也试过这种方法
CREATE PROCEDURE CheckPassword (IN username CHAR(8),IN password_p VARCHAR(20), OUT yes_no char(1))
BEGIN
IF EXISTS(SELECT * FROM USER WHERE USER_ID = username AND password = password_p) then
select '0' into yes_no;
ELSE
select '1' into yes_no;
END IF;
END;
也不起作用,创建程序时必须使用delimeter吗?你能告诉我调用这个过程的语句吗?试试这个:
CREATE PROCEDURE `IsUserPasswordValid`(
IN username varchar(50),
IN password_p VARCHAR(20),
OUT yes_no int
)
BEGIN
SELECT count(*) INTO yes_no
FROM USER u
WHERE u.USER_ID = username && u.password = password_p;
END
如果返回1,则用户是有效的 试试这个:
CREATE PROCEDURE `IsUserPasswordValid`(
IN username varchar(50),
IN password_p VARCHAR(20),
OUT yes_no int
)
BEGIN
SELECT count(*) INTO yes_no
FROM USER u
WHERE u.USER_ID = username && u.password = password_p;
END
如果返回1,则用户是有效的 我认为问题在于用户是一个保留字。另外,我建议您使用函数,而不是过程(您只希望返回一个值)。 此功能的工作原理是:
DELIMITER ||
CREATE FUNCTION CheckPassword (username VARCHAR(8), password_p VARCHAR(20))
RETURNS BOOL
NOT DETERMINISTIC
READS SQL DATA
BEGIN
RETURN EXISTS (SELECT username FROM `USER` WHERE USER_ID = username AND password = password_p);
END;
||
DELIMITER ;
SELECT CheckPassword('a','b');
我认为问题在于用户是一个保留字。另外,我建议您使用函数,而不是过程(您只希望返回一个值)。 此功能的工作原理是:
DELIMITER ||
CREATE FUNCTION CheckPassword (username VARCHAR(8), password_p VARCHAR(20))
RETURNS BOOL
NOT DETERMINISTIC
READS SQL DATA
BEGIN
RETURN EXISTS (SELECT username FROM `USER` WHERE USER_ID = username AND password = password_p);
END;
||
DELIMITER ;
SELECT CheckPassword('a','b');