mysql用户定义的函数总是返回true

时间:2017-01-10 12:21:43

标签: mysql

我创建了mysql函数来检查记录是否存在然后返回true,否则返回true但是给定的函数总是返回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 个答案:

答案 0 :(得分:2)

参数和列之间存在混淆。 始终为参数提供独特的名称:

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

您只是将列与自身进行比较。

答案 1 :(得分: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