2017-03-18 14 views
0

が存在する:トラブルと私は、このSQLクエリを持って

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 

問題は常に私がnullパラメータを渡す場合でも、TRUEを返します。 私はこのような選択stamentテスト:

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

と正常に動作しますが、機能に常にtrueを返すか1

答えて

0

機能があるためifの真の枝にtrueまたはfalseを返しますコードはtrueを返しますが、elseブランチではコードがfalseを返します。その他の戻り値はありません。関数が他の値を返すようにするには、実装されたロジックを変更し、他の値も返す必要があります。

関連する問題