2014-08-21 6 views
0

Я использую MySQL и есть процедура аутентификации входа,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 предупредил, что наличие ошибки при creatinng процедуры, он сказал есть ошибки я NFOR строка 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; 

Не работает тоже, нужно ли использовать демимер при создании процедуры? и можно сказать, у меня заявление о вызове этой процедуры,

ответ

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'); 
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, то пользователь является действительным.

Смежные вопросы