Go言語`database/sql`パッケージのplaceholderが効かない【小学生は最高だぜ】
問題
Go言語でMySQLを使う案件があったので、Goに標準のdatabase/sql
パッケージを使う(あとgithub.com/go-sql-driver/mysql
パッケージも)。問題はdatabase/sql
パッケージの*sql.DB
が持ってるQuery
メソッドがデフォルトで実装しているplaceholder機能を以下のように使おうとした
db, _ := sql.Open("mysql", "myuser:mypass@tcp(localhost:3306)/mydb") rows, e := db.Query("SELECT * FROM ? WHERE age < ?","users",12) fmt.Println(rows, e)
その結果
<nil> Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? WHERE age > ?' at line 1
あらまあ
原因
テーブル名にはplaceholder使えないようだ
解決
db, _ := sql.Open("mysql", "myuser:mypass@tcp(localhost:3306)/mydb") rows, e := db.Query("SELECT * FROM users WHERE age < ?",12) fmt.Println(rows, e)
その結果
&{dc:0xc21004fa20 releaseConn:0xd6c20 rowsi:0xc21000a5a0 closed:false lastcols:[] lasterr:<nil> closeStmt:<nil>} <nil>
取れてるっぽい。
せっかくなので
出力してみた
query := "SELECT * FROM users WHERE age < ?" rows, _ = p.db.Query(query, 12) for rows.Next() { var name string var age int _ = rows.Scan(&name, &age) fmt.Printf("%s\t%d\n", name, age) }
ともか 11 まほ 11 さき 11 ひなた 11 あいり 11 みみ 10 つばき 10 ひいらぎ 10 かげつ 10 まさみ 10
雑感
まったく、小学生は最高だぜ!!
なお当方、三沢真帆推しです
DRY