MySQL需要对保留字进行反对勾选的表格.我有一个表格角色,这是一个保留字,但我已经把我的查询放在后面的刻度中,所以我可以在多行上写它(这是一个玩具查询,大的不适合一行......).
我如何逃避背蜱?
这是我的代码:
dbmap := db.InitDb()
var roles []entities.Role
query :=
` << Difficult to see with SO's code editor widget, but here is a back tick
SELECT *
FROM `Role` <<< Needs escaping
` << Difficult to see, but here is a back tick
_, err := dbmap.Select(&roles, query, nil)
if err != nil {
panic(err)
}
fmt.Println(roles)
Run Code Online (Sandbox Code Playgroud)
Agi*_*gis 60
你无法在反叛内逃避反击,但你可以这样做:
dbmap := db.InitDb()
var roles []entities.Role
query := `
SELECT *
FROM ` + "`Role`"
_, err := dbmap.Select(&roles, query, nil)
if err != nil {
panic(err)
}
fmt.Println(roles)
Run Code Online (Sandbox Code Playgroud)
我只是使用了一个占位符(例如 unicode\xe2\x80\x9d或基本上不会出现在查询中其他任何地方的任何内容)而不是反引号,然后替换了它们:
strings.ReplaceAll(`CREATE TABLE \xe2\x80\x9dmydatabase\xe2\x80\x9d.\xe2\x80\x9dmytable\xe2\x80\x9d (\n \xe2\x80\x9did\xe2\x80\x9d binary(16),\n \xe2\x80\x9dsname\xe2\x80\x9d varchar(45),\n PRIMARY KEY(\xe2\x80\x9did\xe2\x80\x9d)\n)`, "\xe2\x80\x9d", "`")\nRun Code Online (Sandbox Code Playgroud)\n(感谢安德烈·塔兰佐夫提议\xe2\x80\x9d担任占位符。)