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

如何在Go的(*sql.Tx).Exec函数中使用pgcrypto的crypt函数?

解决Go中使用PostgreSQL pgcrypto扩展的语法错误问题

问题出在SQL参数占位符的格式上:PostgreSQL的Go驱动(如pq或pgx)不支持?作为占位符,而是使用$1、$2这类位置编号的占位符。你代码里的?会被驱动直接拼入SQL,导致PostgreSQL解析时出现语法错误。

修正后的代码如下:

_, err = tx.Exec("INSERT INTO users (username, email, password) VALUES ($1, $2, crypt($3, gen_salt('bf', 8)))", u.Username, u.Email, u.Password)
if err != nil {
    fmt.Println("Could not create user in database:", err.Error())
    return err
}

关键说明

  • 手动执行SQL成功是因为你直接传入了硬编码的字符串值,没有使用占位符,PostgreSQL能正确解析crypt函数;
  • Go中必须使用PostgreSQL标准的$N占位符,驱动会自动处理参数的转义和替换,同时保证SQL注入防护;
  • 确保你的数据库已经启用了pgcrypto扩展(你手动执行成功说明已经满足这一点,若未启用可执行CREATE EXTENSION IF NOT EXISTS pgcrypto;)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:01:05