2017-03-18 116 views
0

我有這樣的SQL查詢:麻煩與MySQL的功能和存在

CREATE DEFINER=`root`@`localhost` FUNCTION `user_login_fn`(username varchar(32),pass varchar(128),actual_user int) RETURNS tinyint(1) 
BEGIN 
declare compareResult boolean; 
declare user_id int; 
if (select EXISTS(SELECT * FROM `user` WHERE `username`= username and `password` = sha2(pass, 512) and `status`='A')) THEN 
    SELECT id_user into user_id FROM `user` WHERE `username`= username and `password` = sha2(pass, 512) and `status`='A'; 
    SET compareResult = register_insert_fn(actual_user, 5, Concat("Login user with ID: ", user_id)); 
    return true; 
else 
    SELECT id_user into user_id FROM `user` WHERE `username`= username; 
    SET compareResult = register_insert_fn(actual_user, 5, Concat("Failed login user with ID: ", user_id)); 
    return false; 
END IF; 
END 

的問題是始終返回true,即使我傳遞一個空參數。 我測試選擇stament這樣的:

select EXISTS(SELECT * FROM `user` WHERE `username`= 'prueba' and `password` = sha2('123', 512) and `status`='A') 

,做工精細,但在函數總是返回True或1

回答

0

該函數返回true或false因爲if的真實分支代碼返回true,而在else分支中,代碼返回false。沒有其他的返回值。如果您希望該函數返回其他值,則需要更改已實現的邏輯並確保返回其他值。