You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL编写登录校验函数:匹配用户名密码返回1否则返回0

PostgreSQL登录校验函数实现方案

原代码问题汇总

  • 误用SQL Server专属语法SET nocount ON,PostgreSQL plpgsql无此语法,需直接删除
  • 错误将result声明为输入默认参数,实际应作为函数内部局部变量声明
  • 返回类型设置错误,需求返回1/0整数,原代码设置为VARCHAR(50),需修改为INT
  • 赋值语法不符合plpgsql规则,plpgsql中变量赋值需使用:=运算符,不能使用SET语句
  • 缺少RETURN返回语句,函数执行后无法输出结果值

修正后可直接运行的代码

CREATE FUNCTION checkUsername (Iusername VARCHAR(50), Iuserpassword VARCHAR(50))
RETURNS INT AS $$
DECLARE
    result INT := 0;
BEGIN 
    IF EXISTS (SELECT * FROM users WHERE username = Iusername AND userpassword = Iuserpassword) THEN
        result := 1;
    ELSE 
        result := 0;
    END IF;
    RETURN result;
END;
$$ LANGUAGE plpgsql;

简化版实现(可选)

无需声明变量和IF分支,直接将EXISTS查询的布尔结果转换为整数返回,代码更精简:

CREATE FUNCTION checkUsername (Iusername VARCHAR(50), Iuserpassword VARCHAR(50))
RETURNS INT AS $$
BEGIN 
    RETURN (SELECT EXISTS(SELECT * FROM users WHERE username = Iusername AND userpassword = Iuserpassword))::INT;
END;
$$ LANGUAGE plpgsql;

提示:生产环境禁止明文存储用户密码,需使用bcrypt等不可逆加密算法对密码做哈希处理后再存储,校验时直接对比哈希值即可。

内容的提问来源于stack exchange,提问作者salif shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:45:05