Heim >Backend-Entwicklung >Golang >Wie frage ich MySQL mithilfe von SQLx korrekt mit einem Wertebereich ab?

Wie frage ich MySQL mithilfe von SQLx korrekt mit einem Wertebereich ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-04 05:06:10551Durchsuche

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

SQLx fragt MySQL mit Werten aus einem Slice ab

Beim Abfragen einer Tabelle in MySQL, um Datensätze basierend auf in einem Slice enthaltenen Werten abzurufen, kann es bei der Verwendung von SQLx zu einem Fehler kommen. Der folgende Artikel bietet eine Lösung für dieses Problem.

Problem

Beim Versuch, eine Tabelle mit SQLx auf die folgende Weise abzufragen:

var qids []int
//fill qids dynamically
err = database.SQL.Select(&quotes,
    "SELECT * FROM quote WHERE qid IN ", qids)
if err != nil {
    log.Println(err)
}

Der aufgetretene Fehler ist:

sql: converting Exec argument #0's type: unsupported type []int, a slice
quotes []

Lösung

Die Lösung liegt in der Verwendung der von SQLx bereitgestellten In()-Hilfsfunktion. Mithilfe dieser Funktion kann die Abfrage vorbereitet werden, indem Argumente übernommen und Rebind() verwendet werden. Der korrigierte Code wäre:

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...)

Zusätzliche Ressource

Weitere Anleitungen und Beispiele zu diesem Thema finden Sie in der SQLx-Dokumentation unter: http://jmoiron.github.io/sqlx /

Das obige ist der detaillierte Inhalt vonWie frage ich MySQL mithilfe von SQLx korrekt mit einem Wertebereich ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn