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

如何使用Go将用户输入插入PostgreSQL数据库?

Go语言向PostgreSQL插入字符串的正确写法

你用$1作为占位符是对的,但报错是因为调用DB.Exec时没把input变量传进去。修改后的代码如下:

func insertdb() {
    fmt.Println("Write your text")
    var input string
    fmt.Scanln(&input)
    // 用$1作为参数占位符
    insertstmt := `insert into "todos"("do_info") values($1)`
    // 把input作为第二个参数传给Exec
    _, e := DB.Exec(insertstmt, input)
    checkError(e)
}

关键点说明

  • PostgreSQL在Go的database/sql包中使用$n(n从1开始)作为参数占位符,而非其他数据库常用的?。
  • DB.Exec方法的第一个参数是SQL语句,后续参数依次对应SQL中的$1、$2...,这种写法既能正确传递变量值,还能避免SQL注入风险。

额外提示

如果你的输入包含空格,fmt.Scanln只会读取到第一个空格就停止。要是想读取整行输入,可以改用bufio:

func insertdb() {
    fmt.Println("Write your text")
    reader := bufio.NewReader(os.Stdin)
    input, _ := reader.ReadString('\n')
    // 去掉末尾的换行符
    input = strings.TrimSuffix(input, "\n")
    insertstmt := `insert into "todos"("do_info") values($1)`
    _, e := DB.Exec(insertstmt, input)
    checkError(e)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:45:31