为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用sqlx将变量传递给 do 块?

如何使用sqlx将变量传递给 do 块?

Go
MM们 2022-09-12 20:30:41
我正在尝试通过 在sql中运行以下块脚本。由于块不接受参数,我试图事先准备它。dosqlxdofunc LinkSessionUser(sessionId string, userId string, result *bool) error  {    db := database.GetDB()    statement, err := db.Preparex(`        do        $$        begin        if (exists(select id from "session" where id = $1) and exists(select id from "user" where id = $2)) then          return insert into "session_user" (session_id, user_id) values ($1, $2) on conflict do nothing;        else          raise exception "Either session(id=%) or user(id=%) doesn't exist" $1, $2;        end if;        end        $$;    `)    if err != nil {        return err    }    return statement.Get(result, sessionId, userId)}但是当我运行它时,我得到了以下错误:sql: expected 0 arguments, got 2如何解决此问题?我应该在sql中替换吗?Preparexprepare
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

“我应该使用备品来替换 sql 中的备战吗?”-- 是的,但是您遇到的问题与 或语言本身无关。PreparexGo

命令的代码块是 ,此字符串文本不会在命令执行期间被解析,也没有理由被解析,这就是为什么生成的预准备语句将没有定义的参数。正如您正确指出的那样,不支持输入参数,但是尝试通过包装在准备好的语句中来绕过该限制将根本不会产生您希望的结果。DOstring literalPREPAREDODO

如果需要有条件地执行参数化 SQL 语句,则应使用该命令并显式执行生成的函数。CREATE FUNCTION


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信