有人可以向我解释为什么这行不通吗?

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)

这确实
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)

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

试图这样做,但是问题似乎出在字符串替换上。
inq := strings.Join(artIds, ",")

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

最佳答案

如果您一直小心地从实数int构建inq字符串(以避免注入(inject)),则可以自己构建该字符串,并避免使用?:

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)

如果您经常这样做,最好有一个为您执行此操作的WhereIn函数,或者使用orm。但是要小心您接受哪个参数,就像您接受任意字符串一样,任何东西都可以注入(inject)。

10-07 17:01