Go中的错误MySQL
此代码正在运行:Go中的错误MySQL,mysql,sql,go,sql-update,Mysql,Sql,Go,Sql Update,此代码正在运行: stmt, err := db.Prepare("UPDATE `test` SET `score` = ? WHERE id = ?") CheckErr(err) _, err = stmt.Exec(value, id) 但当我更改代码时,它不起作用: stmt, err := db.Prepare("UPDATE `test` SET ? = ? WHERE id = ?") CheckErr(err) _, err = stmt.Exec("score", valu
stmt, err := db.Prepare("UPDATE `test` SET `score` = ? WHERE id = ?")
CheckErr(err)
_, err = stmt.Exec(value, id)
但当我更改代码时,它不起作用:
stmt, err := db.Prepare("UPDATE `test` SET ? = ? WHERE id = ?")
CheckErr(err)
_, err = stmt.Exec("score", value, id)
有什么问题吗?您必须在数据库更新语句中提到列名。如果update查询的集合行中没有列名,则不会准备该列名。无论好坏,参数只能用于查询中的文字常量。这些值通常是
where
子句中的比较值,有时是select
或set
子句中的常量,在查询的其他部分中则不太常见
标识符不是文字常量。事实上,以下情况都不是:
- 数据库、表和列名
- 函数名
- 运算符(如
)+
- 关键词(如
中的order by
/asc
)desc
sql := "UPDATE `test` SET [col] = ? WHERE id = ?"
sql = strings.replace(sql, "[col]", "score")
stmt, err := db.Prepare(sql)
CheckErr(err)
_, err = stmt.Exec(value, id)
换句话说,直接更改标识符的查询字符串。继续对值使用参数。我是否应该为函数的任何更新编写参数?有没有办法在stmt.Exec(“score”,value,id)中写入列名?错误告诉您什么?可能是@Flimzy的重复项太长了!!2018/08/28 15:24:54 http:panic serving 127.0.0.1:21801:Error 1064:SQL语法有错误;检查与MySQL SERVER r版本相对应的手册,以了解在“?=”附近使用的正确语法?其中id=?'位于第1行goroutine 5[运行]:net/http(*conn).service.func1(0xc04204c960)C:/Go/src/net/http/server.Go:1726+0xd7 panic(0x67cae0,0xc0420c2920)C:/Go/src/runtime/panic.Go:502+0x237 main.checker(0x70e940,0xc0420c2920)G:/code/Go/src/aHTTP/main.Go:138+0x51 main.MySQL()什么太长了?@Flimzy一个错误!我现在该怎么办?@Kaedys。非常感谢。