我收到错误,但我无法在互联网上找到任何解决方法。我是go-lang的新手,我在SQL语句中看不到任何错误。我在go-lang执行更新查询。代码是:
sql = "UPDATE tablename SET id1='' WHERE id2=" +fmt.Sprint(v.acctId)
_, err = db.Exec(sql, nil)
id1和id2都是varchar。我将SQL语句放在一个字符串中然后执行它。我尝试删除其中一个ID,但它仍然显示错误。我注意到的是v.acctId的值由于某种原因并不总是相同的。我不知道为什么会这样,因为当我在MySQL工作区上尝试SQL语句时,它运行正常。
答案 0 :(得分:2)
您收到错误的原因是,当您的查询没有参数占位符(SELECT
part_id ,
subscription,
license = ISNULL(policylicense,enterpriselic)
FROM <table>
WHERE
policylicense IS NOT NULL OR enterpriselic IS NOT NULL
在postgres中,nil
在mysql i中时,您将$1
作为第二个参数传递给Exec相信)指定。
而是做这样的事情
?
此外,您几乎不应该通过连接字符串来构造查询,因为这会导致SQL注入。所以请使用param占位符。
如果你想执行一个没有参数的查询,那就做你正在做的事情,不要将db.Exec("UPDATE tablename SET id1='' WHERE id2=?", v.acctId)
作为第二个参数传递。
nil
答案 1 :(得分:-1)
db.Exec具有以下签名
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
Args是一个varargs参数,这意味着您可以根据需要添加尽可能多的数据。但是,对于传递给Exec的每个变量,应该有一个&#34;?&#34;在你的SQL查询中。您收到错误的原因是您将其传递给nil,您应该将其传递给任何内容。
更改
err = db.Exec(sql, nil)
要
err = db.Exec(sql)
或者,您可以将查询重构为以下
sql = "UPDATE tablename SET id1='' WHERE id2=?"
然后像这样运行exec
err = db.Exec(sql, fmt.Sprint(v.acctId))