Heim >Backend-Entwicklung >Golang >Wie verwende ich SET-Variablen in Go MySQL-Abfragen?
Go MySQL-Abfragen mit SET-Variablen verwenden
Sie versuchen, eine Go MySQL-Abfrage zu schreiben, die Variablen festlegt und diese in einem Komplex verwendet ORDER BY-Klausel. Die Abfrage wird erfolgreich in der Konsole ausgeführt, es tritt jedoch ein Syntaxfehler in Go auf.
Mögliche Lösung
Leider unterstützt das Datenbank-/SQL-Paket von Go derzeit nicht die Einstellung von MySQL-Benutzern. definierte Variablen. Daher ist der in der Frage beschriebene Ansatz mit den aktuellen Einschränkungen des Pakets nicht umsetzbar.
Alternative Ansätze
Dynamische Abfragegenerierung:
Eine Alternative besteht darin, die ORDER BY-Klausel basierend auf den Eingabeparametern dynamisch zu generieren, wodurch die Notwendigkeit einer Variablenersetzung entfällt.
<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) { query := ` SELECT * FROM inventory WHERE user_id = ? ORDER BY ` + generateOrderBy(srt) + ` LIMIT ?,?; ` rows, err := d.Query( query, uid, pg*lim, lim, ) // ... (rest of the code remains the same) return result, nil } func generateOrderBy(srt string) string { order := "" switch srt { case "type,asc": order = "`type` ASC" case "type,desc": order = "`type` DESC" // ... (add other cases) } return order }</code>
Parametererweiterung:
Alternativ können Sie das ? auch manuell erweitern. Platzhalter in der Abfragezeichenfolge, um die Notwendigkeit von Variablen zu vermeiden. Bei diesem Ansatz wird eine Zeichenfolge erstellt, die jedes „?“ ersetzt. mit dem entsprechenden Parameterwert.
<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) { query := fmt.Sprintf(` SELECT * FROM inventory WHERE user_id = '%s' ORDER BY CASE WHEN '%s' = 'type,asc' THEN `type` END, CASE WHEN '%s' = 'type,desc' THEN `type` END DESC, CASE WHEN '%s' = 'visible,asc' THEN visible END, CASE WHEN '%s' = 'visible,desc' THEN visible END DESC, CASE WHEN '%s' = 'create_date,asc' THEN create_date END, CASE WHEN '%s' = 'create_date,desc' THEN create_date END DESC, CASE WHEN '%s' = 'update_date,asc' THEN update_date END, CASE WHEN '%s' = 'update_date,desc' THEN update_date END DESC LIMIT %d,%d; `, uid, srt, srt, srt, srt, srt, srt, srt, srt, pg*lim, lim) rows, err := d.Query( query, ) // ... (rest of the code remains the same) return result, nil }</code>
Das obige ist der detaillierte Inhalt vonWie verwende ich SET-Variablen in Go MySQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!