Heim >Backend-Entwicklung >Golang >Wie frage ich MySQL mithilfe von SQLx korrekt mit einem Wertebereich 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.
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 []
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...)
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!