SQL 准备语句返回语法错误
SQL Prepare statement returning syntax error
我正在尝试将传入的表单值插入我在 Heroku 上的 PostgreSQL 数据库 table。这是正在使用的 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 ","
table 之前是这样创建的:
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));
我做错了什么?
正确的做法是将 ? with $N 其中 N 是作为额外参数传递给 db.Exec()
的参数的索引
这条新语句不会导致错误:
insForm, err := db.Prepare("INSERT INTO al(name, asslia, balance) VALUES( , , )")
我正在尝试将传入的表单值插入我在 Heroku 上的 PostgreSQL 数据库 table。这是正在使用的 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 ","
table 之前是这样创建的:
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));
我做错了什么?
正确的做法是将 ? with $N 其中 N 是作为额外参数传递给 db.Exec()
的参数的索引这条新语句不会导致错误:
insForm, err := db.Prepare("INSERT INTO al(name, asslia, balance) VALUES( , , )")