Dynamisches ORDER BY in Golang mit MySql
Problem:
Schwierigkeit beim dynamischen Sortieren der Abfrage Ergebnisse mit db.Select() mit Platzhalter.
Analyse:
Im Gegensatz zu Filterparametern können Platzhalter (?) nicht für SQL-Schlüsselwörter oder Bezeichner verwendet werden, einschließlich der ORDER BY-Klausel.
Auflösung:
Um eine dynamische Ordnung zu erreichen, kann man Folgendes verwenden fmt.Sprintf(), um den Abfragetext dynamisch zusammenzustellen. Zum Beispiel:
ordCol := "title" qtext := fmt.Sprintf("SELECT * FROM Apps ORDER BY %s DESC", ordCol) rows, err := db.Query(qtext)
Vorsichtsmaßnahmen:
Beim dynamischen Zusammenstellen von Abfragen ist es wichtig, Schutzmaßnahmen gegen SQL-Injection zu implementieren. Dabei muss sichergestellt werden, dass die für Spaltennamen verwendeten Werte bestimmten Kriterien entsprechen, z. B. dass nur englische Buchstaben, Ziffern und Unterstriche zulässig sind:
valid := regexp.MustCompile("^[A-Za-z0-9_]+$") if !valid.MatchString(ordCol) { // Invalid column name, prevent SQL injection }
Das obige ist der detaillierte Inhalt vonWie kann ich dynamische ORDER BY-Klauseln in Go mit MySQL implementieren, um SQL-Injection zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!