Golang MySQL使用IN运算符查询未定义的args数量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Golang MySQL使用IN运算符查询未定义的args数量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1478字,纯文字阅读大概需要3分钟。
内容图文
![Golang MySQL使用IN运算符查询未定义的args数量](/upload/InfoBanner/zyjiaocheng/888/7c8d5b25e41849769729347aabf3ecd3.jpg)
我正在尝试使用带有未定义参数的IN运算符的MySQL查询到我的Golang项目中.
我正在使用github.com/go-sql-driver/mysql包并尝试在此Stackoverflow应答上构建我的解决方案:How to execute an IN lookup in SQL using Golang?
我已经阅读了一些类似的帖子,给我一些关于如何去的建议,但是我坚持查询的执行部分,因为它不允许直接使用切片作为参数.
//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)
这意味着您可以使用省略号…将切片值作为variadic参数的值传递,但该切片必须是[] 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.
内容总结
以上是互联网集市为您收集整理的Golang MySQL使用IN运算符查询未定义的args数量全部内容,希望文章能够帮你解决Golang MySQL使用IN运算符查询未定义的args数量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。