首页 > 解决方案 > 如何在执行mysql更新sql语句时同时绑定多变量和切片变量,如update .. where .. in?

问题描述

我在 golang 中有一些字符串变量和一个切片变量作为 SQL 参数,但是corresponding parameter is non-variadic当我尝试执行时返回了错误。
那么在这种情况下如何绑定这些变量呢?

mysql 连接器:go-sql-driver/mysql
假代码

func UpdateTblNm (foo, baz string, bar int, pars []string) error {
    stmt:= `update tbl_nm set foo=?, bar=? where baz=? and par in (?`+ strings.Repeat(", ?", len(pars)-1) + `)`
    if _, err := tx.Exec(stmt, foo, bar, baz, pars...); err!=nil {
        return err
    }
    ... ...
}

我是 gopher 的新人..
希望你的帮助,谢谢

标签: mysqlsqlgo

解决方案


由于您有固定数量的参数和一个可变参数,因此您必须将它们全部收集到一个数组中并传递它们,因为 go variadics 无法处理您要执行的操作:

args:=[]interface{}{foo,baz,bar}
for _,x:=range pars {
  args=append(args,x)
}
tx.Exec(stmt,args...)

推荐阅读