我进行了搜索,知道已经被问过很多次了,但是我的情况似乎有所不同。我没有使用update
或and
。由于以下测试,我将其称为“在函数中”,我真的很困惑。
功能:
drop function if exists `login_t`;
create function `login_t`()
returns bool
begin
declare `pw` varchar(32);
set `pw` = '4297f44b13955235245b2497399d7a93';
return if(pw, pw = MD5(CONCAT('123', '123')), false);
end;
select login_t(); -- > Truncated incorrect DOUBLE value: '4297f44b13955235245b2497399d7a93'
进行中:
drop procedure if exists `login_t2`;
create procedure `login_t2`()
begin
declare `pw` varchar(32);
set `pw` = '4297f44b13955235245b2497399d7a93';
select if(pw, pw = MD5(CONCAT('123', '123')), false);
end;
call login_t2(); -- 1
答案 0 :(得分:0)
看起来像从函数返回布尔值时,该值应该是数字。 MySQL尝试将if-function(pw)的第一个参数转换为数值,然后失败。
您可以使用代码:
create function `login_t`()
returns boolean
begin
declare `pw` varchar(32);
set `pw` = '4297f44b13955235245b2497399d7a93';
if (pw = MD5(CONCAT('123', '123'))) then
return true;
else
return false;
end if;
end;