使用切片 IN 子句的 Golang 数据库查询

Mic*_*ett 5 sql go slice

有人可以向我解释为什么这不起作用吗?

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)
Run Code Online (Sandbox Code Playgroud)

这确实

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 (6,7)", inq)
Run Code Online (Sandbox Code Playgroud)

我正在尝试用一个整数切片做一个简单的 IN 子句,并且建议的每个解决方案似乎都不太惯用

尝试这样做,但问题似乎是字符串替换。

inq := strings.Join(artIds, ",")
Run Code Online (Sandbox Code Playgroud)

我有点惊讶 go 似乎没有一种优雅的方式来处理这个查询。

Ken*_*ant 3

如果您小心地从真正的整数构建 inq 字符串(以避免注入),您可以自己构建字符串并避免使用 ?:

inq := "6,7" 
sql := fmt.Sprintf("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (%s)",inq)
rows, err := db.Query(sql)
Run Code Online (Sandbox Code Playgroud)

如果你经常这样做,最好有一个WhereIn函数来为你做这件事,或者使用orm。不过要小心你接受的参数,就像你接受任意字符串一样,任何东西都可以注入。