gpt4 book ai didi

mysql - Golang MySQL 使用 IN 运算符查询未定义数量的参数

转载 作者:IT王子 更新时间:2023-10-29 01:09:37 25 4
gpt4 key购买 nike

我正在尝试在我的 Golang 项目中使用带有未定义参数数量的 IN 运算符的 MySQL 查询。

我正在使用包 github.com/go-sql-driver/mysql 并尝试根据这个 Stackoverflow 答案构建我的解决方案:How to execute an IN lookup in SQL using Golang?

我读过一些类似的帖子,为我提供了一些建议,但我仍然停留在查询的执行部分,因为它不允许直接使用 slice 作为参数。

//converting my form args []string into []int
var args []int
for _, v := range r.Form["type"] {
t, _ := strconv.Atoi(v)
args = append(args, t)
}

sql := "SELECT id, name FROM resources WHERE id IN (SELECT resource_id FROM resources_types WHERE type_id IN (?" + strings.Repeat(",?", len(args)-1) + "))"
fmt.Println("Query : ", sql)
stmt, _ := db.Prepare(sql)
rows, err := stmt.Query(args)
defer stmt.Close()

Golang 在执行时返回一个错误:

Query : SELECT id, name FROM resources WHERE id IN (SELECT resource_id FROM resources_types WHERE type_id IN (?,?)) "sql: statement expects 2 inputs; got 1"

当我尝试

时它有效
rows, err := stmt.Query(args[0], args[1])

但由于我需要未定义数量的参数,所以这不是解决方案。至少有可能让它与 MySQL 一起工作吗?

最佳答案

Stmt.Query()有一个可变参数:

func (s *Stmt) Query(args ...interface{}) (*Rows, error)

这意味着您可以使用省略号 ... 将 slice 值作为可变参数的值传递,但该 slice 必须是 []interface{} 类型,例如:

var args []interface{}
for _, v := range r.Form["type"] {
t, _ := strconv.Atoi(v)
args = append(args, t)
}

// ...

rows, err := stmt.Query(args...)

作为替代方案,您可以预先构建 SQL 查询并在不传递查询参数的情况下执行,有关示例,请参见 Go and IN clause in Postgres .

关于mysql - Golang MySQL 使用 IN 运算符查询未定义数量的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39223856/

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