gpt4 book ai didi

mysql - Go 中的 MySQL 错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:10:53 26 4
gpt4 key购买 nike

此代码有效:

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)

有什么问题?

最佳答案

无论好坏,参数只能用于查询中的文字常量。这些通常是 where 子句中的比较值,有时是 selectset 子句中的常量——很少出现在查询的其他部分.

标识符不是文字常量。事实上,以下都不是:

  • 数据库、表和列名
  • 函数名
  • 运算符(例如+)
  • 关键字(例如order by中的asc/desc)

不幸的是,要“动态地”实现这些,您需要通过直接修改字符串来修改查询字符串。这是相当令人讨厌的,但别无选择。

这种方法的好处之一是它允许数据库存储然后重新使用查询计划。消除编译阶段对于非常快速的查询来说可能是一个重要的性能提升。

编辑:

我不太懂go,但是思路是:

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)

换句话说,直接更改标识符的查询字符串。继续为值使用参数。

关于mysql - Go 中的 MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52054801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com