2017-01-10 5 views
-1

Я создал функцию mysql, чтобы проверить, существует ли запись, а затем возвращает true else false, но данная функция всегда возвращает true. Не знаете, почему и где мы ошибаемся. Любой предлагаю, пожалуйста.mysql user defined function always return true

CREATE DEFINER = `hugosys`@`localhost` FUNCTION `GetUserFeedLike` (
`userFeedID` INT, 
`userID` INT 
) RETURNS BOOLEAN NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER BEGIN DECLARE flag BOOL DEFAULT FALSE ; 

SELECT EXISTS (

SELECT * 
FROM userFeedLikes 
WHERE userFeedID = userFeedID 
AND userID = userID 
) 
INTO flag; 

RETURN flag; 

END 

ответ

2

У вас есть путаница между параметрами и столбцами. Всегда дать Parameters отличительные имена:

CREATE FUNCTION GetUserFeedLike (
    in_userFeedID INT, 
    in_userID` INT 
) RETURNS BOOLEAN 
BEGIN 
    DECLARE v_flag BOOL; DEFAULT FALSE ; 

    SELECT EXISTS (SELECT * 
        FROM userFeedLikes 
        WHERE userFeedID = in_userFeedID AND userID = in_userID 
       ) 
    INTO v_flag; 

    RETURN v_flag; 
END; 

Когда вы пишете:

WHERE userFeedID = userFeedID AND userID = userID 

Вы просто сравнивая колонки к себе.

+0

Да, есть, спасибо – Ajai

1

Вы сравниваете столбцы с самим собой, поэтому оно возвращает true.

Измените имена переменных на бит, отличный от префикса p_, чтобы обозначить параметр.

CREATE DEFINER = `hugosys`@`localhost` FUNCTION `GetUserFeedLike` (
`p_userFeedID` INT, 
`p_userID` INT 
) RETURNS BOOLEAN NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER BEGIN DECLARE flag BOOL DEFAULT FALSE ; 

SELECT EXISTS (

SELECT * 
FROM userFeedLikes 
WHERE userFeedID = `p_userFeedID` 
AND userID = `p_userID` 
) 
INTO flag; 

RETURN flag; 

END 
+0

Да, есть, спасибо – Ajai