我正在尝试使用带有未定义参数数量的 IN 运算符在我的 Golang 项目中使用 MySQL 查询。
我正在使用该包github.com/go-sql-driver/mysql并尝试在此 Stackoverflow 答案上构建我的解决方案:如何使用 Golang 在 SQL 中执行 IN 查找?
我读过一些类似的帖子,给了我一些关于前进方向的建议,但我被困在查询的执行部分,因为它不允许直接使用切片作为参数。
//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 在执行时返回一个错误:
查询:SELECT id, name FROM resources WHERE id IN (SELECT resource_id FROM resources_types WHERE type_id IN (?,?)) “sql: 语句需要 2 个输入;得到 1”
当我尝试时它有效
rows, err := stmt.Query(args[0], args[1])
但由于我需要未定义数量的参数,这不是解决方案。至少有可能让它与 MySQL 一起工作吗?