Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql存储过程登录_Mysql_Sql_Stored Procedures - Fatal编程技术网

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

我使用的是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;
但它警告说,在创建过程时出错,它说第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');