.sql。.DB。使用占位符时的查询"?" "expected 0 arguments"



我正在使用github.com/go-sql-driver/mysql驱动程序database/sql与 golang 中的 MySQL 数据库进行交互

我将标签与带有表article_to_tag的文章相关联,该表将文章 ID 与标签 ID 相关联,并使用本文底部的 Toxi 解决方案查找具有某些标签的文章

此代码段应该在我的数据库中查询与数组中所有标签关联的所有文章itags

s := "SELECT a.* " +
"FROM article_to_tag at, articles a, tags t " +
"WHERE t.ID = at.TagID " +
"AND a.ID = at.ArticleID " +
"AND (t.Name IN ('?'" + strings.Repeat(",'?'", len(itags)-1) + ")) " +
"GROUP BY a.ID " +
"HAVING COUNT(a.ID)=" + strconv.Itoa(len(itags)) + ";"
fmt.Println(s)
rows, err := db.Query(s, itags...)

当查询 2 个标签时,这将生成以下字符串,但使用该字符串进行查询会返回错误:sql: expected 0 arguments, got 2

SELECT a.*
FROM article_to_tag at, articles a, tags t
WHERE t.ID = at.TagID
AND a.ID = at.ArticleID
AND (t.Name IN ('?','?'))
GROUP BY a.ID HAVING COUNT(a.ID)=2;

为什么查询忽略?占位符,我应该如何安全地构建查询?

省略单引号。使用占位符时,请将其置于不加引号的位置。用引号,它只是一个字符串。

相关内容

最新更新