mysql存储过程登录

时间:2014-08-21 05:23:09

标签: 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';
    ELSE
         set yes_no = '1';
    END IF;
    END;

但是mysql警告说,在创建程序时遇到错误,它说第4行有错误,它是"设置yes_no =' 0&#39 ;;" ?我也尝试过这种方式,

    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;

也没有用,是否必须在创建程序时使用分隔符?你可以告诉我调用这个程序的声明,

2 个答案:

答案 0 :(得分:4)

我认为问题在于USER是一个保留词。另外,我建议你使用一个函数,而不是一个过程(你只需要返回一个值)。 这个功能有效:

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');

答案 1 :(得分:0)

试试这个:

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则用户有效。