golang mysql 驱动程序在参数替换时失败
golang mysql driver failing at parameter replacement
OS 莫哈维,
MySQL v8.0.15,
去 1.12.3 darwin/amd64
import (
"database/sql"
// import mysql driver anonymously (just run the init)
_ "github.com/go-sql-driver/mysql"
)
...
_, err = db.db.Exec("USE ?", "test")
if err != nil {
return errors.Wrapf(err, "error selecting database %s", opt.Database)
}
_, err = db.db.Prepare("SELECT value FROM ? WHERE key = ?")
if err != nil {
return errors.Wrap(err, "error generating SELECT statement")
}
我得到的错误是error selecting database test: 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 '?' at line 1
对于我尝试执行的任何参数替换,我都遇到了相同的错误(关于“?”周围的语法)。我已经检查了手册以及我在网上找到的教程和示例,但不能完全说出我做错了什么。
如果我用值(字符串)替换“?”,那么一切正常。
准备好的语句中的问号 ?
用于值,而不是 table、数据库或列名称。
使用fmt.Sprintf
填写数据库结构相关值
示例:
_, err := db.db.Prepare(fmt.Sprintf("SELECT value FROM %s WHERE key = ?", table))
OS 莫哈维, MySQL v8.0.15, 去 1.12.3 darwin/amd64
import (
"database/sql"
// import mysql driver anonymously (just run the init)
_ "github.com/go-sql-driver/mysql"
)
...
_, err = db.db.Exec("USE ?", "test")
if err != nil {
return errors.Wrapf(err, "error selecting database %s", opt.Database)
}
_, err = db.db.Prepare("SELECT value FROM ? WHERE key = ?")
if err != nil {
return errors.Wrap(err, "error generating SELECT statement")
}
我得到的错误是error selecting database test: 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 '?' at line 1
对于我尝试执行的任何参数替换,我都遇到了相同的错误(关于“?”周围的语法)。我已经检查了手册以及我在网上找到的教程和示例,但不能完全说出我做错了什么。
如果我用值(字符串)替换“?”,那么一切正常。
准备好的语句中的问号 ?
用于值,而不是 table、数据库或列名称。
使用fmt.Sprintf
填写数据库结构相关值
示例:
_, err := db.db.Prepare(fmt.Sprintf("SELECT value FROM %s WHERE key = ?", table))