首页 > 后端开发 > Golang > 正文

如何在 IN 子句中使用切片执行 Go 数据库查询?

Mary-Kate Olsen
发布: 2024-10-25 21:11:28
原创
401 人浏览过

How to Execute a Go Database Query with a Slice in the IN Clause?

使用 Slice IN 子句的 Golang 数据库查询:全面理解

问题:

为什么下面的 Golang 数据库查询在 IN 子句中使用整数切片失败:

<code class="go">inq := "6,7" //strings.Join(artIds, ",")
rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
登录后复制

答案:

出现此问题的原因是用于查询的数据库/sql 包未检查查询并将参数直接传递给数据库驱动程序。这使得处理包含可变数量参数的 IN 子句的查询具有挑战性。

在提供的查询中,?绑定变量对应于单个参数,而预期用途是根据切片 artIds 的长度绑定多个参数。但是,驱动程序无法正确处理此问题。

要解决此问题,建议使用 sqlx 包,它可以更好地控制数据库查询。

解决方案使用sqlx 包:

<code class="go">var artIds = []int{6, 7}
query, args, err := sqlx.In("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?);", artIds)</code>
登录后复制

sqlx.In 函数处理查询并为整数切片生成适当的绑定变量,使查询能够成功执行。

有关此主题的更多信息,请参阅 InQueries 的 Godoc 文档。

以上是如何在 IN 子句中使用切片执行 Go 数据库查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!