🤷‍♂️

【Go】なんてこったプレースホルダー

2023/10/23に公開

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)

参考にしていたライブラリのドキュメント通りにプレースホルダーを記載しているのに...なんだ?
http://go-database-sql.org/retrieving.html

解決

どうやら、SQLドライバごとにプレースホルダーの記法が異なるらしい。
http://go-database-sql.org/prepared.html

以下、上記より引用

  • MySQL

    • WHERE col = ?
    • VALUES(?, ?, ?)
  • postgreSQL

    • WHERE col = $1
    • VALUES($1, $2, $3)
  • Oracle

    • WHERE col = :col
    • VALUES(:val1, :val2, :val3)

Discussion