如何使用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
相关产品推荐
相关产品推荐

