Mysql
 sql >> Base de données >  >> RDS >> Mysql

construire une requête dynamique dans mysql et golang

Pour répondre à votre question sur la façon de formater la chaîne, la réponse simple est d'utiliser fmt.Sprintf pour structurer votre chaîne. Cependant voir plus bas pour une note rapide sur l'utilisation de fmt.Sprintf pour les requêtes db :

Exemple :

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)

En l'utilisant pour les requêtes, vous êtes à l'abri des injections. Cela étant dit, vous pourriez être tenté de modifier cela et d'utiliser db.Exec également pour les créations/mises à jour/suppressions. En règle générale, si vous utilisez db.Exec avec fmt.Sprintf et que vous ne nettoyez pas vos entrées en premier, vous vous ouvrez aux injections sql .

GoPlay avec un exemple simple de pourquoi fmt.Sprintf avec db.Exec est mauvais :
https ://play.golang.org/p/-IWyymAg_Q

Vous devez utiliser db.Query ou db.Prepare de manière appropriée pour éviter ces types de vecteurs d'attaque. Vous devrez peut-être modifier l'exemple de code ci-dessus pour obtenir un extrait de code sûr pour les injections, mais j'espère que je vous en ai donné assez pour commencer.