在 MySQL 中查询表以根据切片中包含的值检索记录时,使用 SQLx 可能会出现错误。下面的文章提供了此问题的解决方案。
尝试按以下方式使用 SQLx 查询表时:
var qids []int //fill qids dynamically err = database.SQL.Select(&quotes, "SELECT * FROM quote WHERE qid IN ", qids) if err != nil { log.Println(err) }
遇到的错误是:
sql: converting Exec argument #0's type: unsupported type []int, a slice quotes []
解决方案在于利用 In() 辅助函数由 SQLx 提供。通过利用此函数,可以通过获取参数并使用 Rebind() 来准备查询。更正后的代码为:
var qids []int // fills qids on query dynamically query, args, err := sqlx.In("SELECT * FROM quote WHERE qid IN (?)", qids) if err != nil { log.Fatal(err) } // sqlx.In returns queries with the `?` bindvar, we can rebind it for our backend // query = database.SQL.Rebind(query) // database.SQL should be a *sqlx.DB err = database.SQL.Select(&quotes, query, args...) if err != nil { log.Fatal(err) } // or just in one line: err = database.SQL.Select(&quotes, database.SQL.Rebind(query), args...)
有关此主题的进一步指导和示例,请参阅 SQLx 文档:http://jmoiron.github.io/sqlx /
以上是如何使用 SQLx 正确查询 MySQL 的值片段?的详细内容。更多信息请关注PHP中文网其他相关文章!