首頁 >後端開發 >Golang >如何使用 SQLx 正確查詢 MySQL 的值片段?

如何使用 SQLx 正確查詢 MySQL 的值片段?

Patricia Arquette
Patricia Arquette原創
2024-12-04 05:06:10620瀏覽

How to Correctly Query MySQL with a Slice of Values Using SQLx?

SQLx 使用切片中的值查詢 MySQL

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn