golang MySQL驱动程序在更换失效

问题描述 投票:0回答:1

OS Mojave,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

对于我尝试进行的任何参数替换,我得到了相同的错误(关于'?'的语法)。我查看了手册以及我在网上找到的教程和示例,并不能完全说明我做错了什么。

如果我用值(字符串)替换'?',那么一切正常。

mysql database go driver
1个回答
3
投票

准备好的语句中的问号?用于值,而不是表,数据库或列名。

使用fmt.Sprintf填写数据库结构相关值。

例:

_, err := db.db.Prepare(fmt.Sprintf("SELECT value FROM %s WHERE key = ?", table))
© www.soinside.com 2019 - 2024. All rights reserved.