sql自定义函数报错~求指导

为什么这个函数会返回多个值?


DELIMITER $$
create function check_or_alter_pwd(name VARCHAR(255),pwd VARCHAR(255),newpwd VARCHAR(255),act INT) returns boolean
begin
    declare pawd VARCHAR(255);
    SELECT passwd INTO @pawd FROM acount WHERE user_name = name;
    IF @pawd IS NULL OR @pawd != pwd THEN
        SELECT 'Invalid username or password';
        return False;
    end if;
    IF act = 1 THEN
        SELECT 'Login successful';
        return True;
    ELSEIF act = 2 THEN        
        IF CHAR_LENGTH(newpwd) < 4 OR CHAR_LENGTH(newpwd) > 10 OR NOT(newpwd REGEXP '^[a-zA-Z0-9]+$') THEN
            SELECT 'Invalid new password';
            return False;
        else 
            UPDATE acount SET passwd = newpwd WHERE user_name = name;
            SELECT 'Password changed successfully';
            return True;  
        end if;
    ELSE
        SELECT 'Invalid action';
        return False;
    END IF;
end $$
DELIMITER ;

报错是这个

img

把所有的select 字符串注释掉

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7411265
  • 这篇博客也不错, 你可以看下SQL语句当查询条件为空时默认查询全部数据,不为空是则按照条件进行查询
  • 除此之外, 这篇博客: SQL必知必会习题练习中的 第六课 用通配符进行固定 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中包含toy一词的产品。

    SELECT prod_name,prod_desc
    FROM products
    WHERE prod_name LIKE '%toy%';
    

    2.反过来再来一次。编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中未出现toy一词的产品。这次,按产品名称对结果进行排序。

    SELECT prod_name,prod_desc
    FROM products
    WHERE prod_name NOT LIKE '%toy%'
    order by prod_name;
    

    where not prod_name like '%toy%'也是正确的语法

    3.编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中同时出现toy和carrots的产品。有好几种方法可以执行此操作,但对于这个挑战题,请使用AND和两个LIKE比较。

    SELECT prod_name,prod_desc
    FROM products
    WHERE prod_desc LIKE '%toy%'
    AND prod_desc LIKE '%carrots%';
    

    4.来个比较棘手的。我没有特别向你展示这个语法,而是想看看你根据目前已学的知识是否可以找到答案。编写SQL语句,从Products表中检索产品名称(prod_name)和描述(prod_desc),仅返回在描述中以先后顺序同时出现toy和carrots的产品。提示:只需要用带有三个%符号的LIKE即可。

    SELECT prod_name,prod_desc
    FROM products
    WHERE prod_desc LIKE '%toy%carrots%';
    
  • 您还可以看一下 刘海龙老师的sql注入视频教程课程中的 数字型与字符串型的注入小节, 巩固相关知识点