🤷♂️
【Go】なんてこったプレースホルダー
1行でわかる要旨
・PostgreSQLを利用する際、プレースホルダーは「$1,$2...」のように記載しましょう
遭遇
Goで遊び始めた矢先、以下のエラーが発生した。
2023/10/23 16:49:55 登録失敗 db.Exec error err:pq: syntax error at or near ","
↓INSERT文
register.go
insertQuery := "insert into article values (nextval('id_seq'), ?, ?, ?, ?, ?, NULL, NULL, ?, ?)"
db := dbAccess.AccessDB()
_, err = db.Exec(insertQuery, c.PostForm("title"), "User", time.Now().Format(customFormat), "User", time.Now().Format(customFormat), c.PostForm("tag"), file.Filename)
参考にしていたライブラリのドキュメント通りにプレースホルダーを記載しているのに...なんだ?
解決
どうやら、SQLドライバごとにプレースホルダーの記法が異なるらしい。
以下、上記より引用
-
MySQL
- WHERE col = ?
- VALUES(?, ?, ?)
-
postgreSQL
- WHERE col = $1
- VALUES($1, $2, $3)
-
Oracle
- WHERE col = :col
- VALUES(:val1, :val2, :val3)
Discussion