问题:
为什么下面的 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中文网其他相关文章!