【问题标题】:SQL Prepare statement returning syntax error [duplicate]SQL Prepare 语句返回语法错误 [重复]
【发布时间】:2019-12-17 11:00:40
【问题描述】:

我正在尝试将传入的表单值插入到 Heroku 上的 PostgreSQL 数据库表中。这是正在使用的 Go 函数:

func Insert(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    if r.Method == "POST" {
        nameo := r.FormValue("name")
        typeo := r.FormValue("asslia")
        balanceo := r.FormValue("balance")
        insForm, err := db.Prepare("INSERT INTO al(name, asslia, balance) VALUES( ? , ? , ? )")
        if err != nil {
            panic(err.Error())
        }
        insForm.Exec(nameo, typeo, balanceo)
        log.Println("INSERT: Name: " + nameo + " | Type: " + typeo)
    }
    defer db.Close()
    http.Redirect(w, r, "/", 301)
}

我在insForm, err := db.Prepare("INSERT INTO al(name, asslia, balance) VALUES( ? , ? , ? )") 行不断收到错误pq: syntax error at or near ","

该表之前是这样创建的:

CREATE TYPE types AS ENUM ('asset', 'liability');

CREATE TABLE IF NOT EXISTS al 
(id SERIAL, 
asslia TYPES, 
balance MONEY, 
name VARCHAR(64) NOT NULL UNIQUE, 
CHECK (CHAR_LENGTH(TRIM(name)) > 0));

我做错了什么?

【问题讨论】:

    标签: postgresql go prepared-statement heroku-postgres


    【解决方案1】:

    这样做的正确方法是替换 ? $N 其中 N 是作为额外参数传递给 db.Exec() 的参数的索引

    这个新语句不会导致错误:

    insForm, err := db.Prepare("INSERT INTO al(name, asslia, balance) VALUES( $1 , $2 , $3 )")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 2012-07-07
      • 2013-03-21
      • 2016-01-04
      • 2013-11-17
      • 1970-01-01
      • 2014-06-06
      相关资源
      最近更新 更多