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
Freigeben: 2024-12-04 05:06:10
Original
587 Leute haben es durchsucht

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)
}
Nach dem Login kopieren

Der aufgetretene Fehler ist:

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

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...)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage