Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen einer dynamischen Abfrage in mysql und golang

Um Ihre Frage zum Formatieren der Zeichenfolge zu beantworten, verwenden Sie einfach fmt.Sprintf um Ihren String zu strukturieren. Allerdings siehe weiter unten für einen kurzen Hinweis zur Verwendung von fmt.Sprintf für DB-Abfragen:

Beispiel:

query := fmt.Sprintf("SELECT id FROM users WHERE login='%s'", login)
err = db.Query(query)

// Equivalent to:
rows, err := db.Query("SELECT id FROM users WHERE login=?", login)

Wenn Sie dies für Abfragen verwenden, sind Sie vor Injektionen sicher. Davon abgesehen könnten Sie versucht sein, dies zu ändern und db.Exec auch für Erstellungen/Aktualisierungen/Löschungen zu verwenden. Als allgemeine Faustregel gilt:Wenn Sie db.Exec mit fmt.Sprintf verwenden und Ihre Eingaben nicht zuerst bereinigen, setzen Sie sich SQL-Injektionen aus .

GoPlay mit einfachem Beispiel, warum fmt.Sprintf mit db.Exec schlecht ist:
https://play.golang.org/p/-IWyymAg_Q

Sie sollten db.Query verwenden oder db.Prepare in geeigneter Weise, um solche Angriffsvektoren zu vermeiden. Möglicherweise müssen Sie das obige Codebeispiel ändern, um ein injektionssicheres Snippet zu erhalten, aber hoffentlich habe ich Ihnen genug gegeben, um loszulegen.