将 Go var 传递给 MySQL - 在 Go lang 程序 (MySQL db) 中尝试执行

我正在尝试在 db.Exec 中传递一个 Go 变量:


    pinakas := "dokimi03"

    crTable := `CREATE TABLE ? (id bigint(20) NOT NULL AUTO_INCREMENT, username varchar(100) NOT NULL, password varchar(100) NOT NULL, email varchar(100) NOT NULL, PRIMARY KEY (id));`


    _, errCreate := db.Exec(crTable, pinakas)

    if errCreate != nil {

        log.Println(errCreate)

    }

运行代码时从 MySQL 得到的错误是:


错误 1064:您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '? 附近使用的正确语法。(id bigint(20) NOT NULL AUTO_INCREMENT, username varchar(100) NOT NULL, passwo' 在第 1 行


?如果我用dokimi03表名替换,代码就会运行(pinakas当然还要删除 var)。


我搜索了文档,?似乎是在 Go-MySQL 上表示变量的合适字符。我错过了什么?


眼眸繁星
浏览 109回答 1
1回答

qq_遁去的一_1

?是 MySQL 中参数占位符的正确字符,但不能将参数用作表标识符。参数只能用作标量值的替代品,不能用作标识符、SQL 关键字或表达式等。这不仅与 MySQL 相关,也不仅与 Go 连接器相关。它在 SQL 语言的每个实现中都是标准的(有一些连接器通过字符串替换来伪造参数,但 MySQL 的 Go 连接器不这样做)。在将表名传递给 之前,表名必须固定在 SQL 字符串中db.Exec()。例如,我会这样写:pinakas := "dokimi03"crTable := fmt.Sprintf("CREATE TABLE `%s` (id bigint(20) NOT NULL AUTO_INCREMENT, username varchar(100) NOT NULL, password varchar(100) NOT NULL, email varchar(100) NOT NULL, PRIMARY KEY (id))", pinakas)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go