我想检查一行是否存在以及它是否未向用户返回消息。 我做了以下测试,得到了结果:
CREATE DEFINER=`root`@`localhost` FUNCTION `ud_fnc_DoesUserNameExist`(userName varchar(200)) RETURNS int(11)
BEGIN
return exists(select `Id` from `ud_tbl_User` where `userName` = userName);
END
即使该值不存在,此函数也会返回1.
CREATE DEFINER=`root`@`localhost` FUNCTION `ud_fnc_DoesUserNameExist`(userName varchar(200)) RETURNS int(11)
BEGIN
return (select count(`Id`) from `ud_tbl_User` where `userName` = userName);
END
即使该值不存在,此函数也会返回1。
答案 0 :(得分:0)
这是因为您的参数的名称与列名称完全相同
因此MySQL会选择将其解释为列名,最后会得到where columnname = columnname
,这与where 1 = 1
相同,后者始终为true
CREATE DEFINER=`root`@`localhost` FUNCTION `ud_fnc_DoesUserNameExist`(myUserName varchar(200)) RETURNS int(11)
BEGIN
return exists(select `Id` from `ud_tbl_User` where `userName` = myUserName);
END