Mysql
 sql >> Database >  >> RDS >> Mysql

costruire una query dinamica in MySQL e Golang

Per rispondere alla tua domanda su come formattare la stringa, la semplice risposta è usare fmt.Sprintf per strutturare la tua stringa. Comunque vedi più in basso per una breve nota sull'uso di fmt.Sprintf per le query db:

Esempio:

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)

Usando questo per le query, sei al sicuro dalle iniezioni. Detto questo, potresti essere tentato di modificarlo e utilizzare db.Exec anche per creazioni/aggiornamenti/eliminazioni. Come regola generale, se usi db.Exec con fmt.Sprintf e non sanitizzi prima i tuoi input, ti apri alle iniezioni sql .

GoPlay con un semplice esempio del perché fmt.Sprintf con db.Exec non è valido:
https://play.golang.org/p/-IWyymAg_Q

Dovresti usare db.Query o db.Prepare in modo appropriato per evitare questo tipo di vettori di attacco. Potrebbe essere necessario modificare l'esempio di codice sopra per ottenere uno snippet sicuro per l'iniezione, ma spero di averti fornito abbastanza per iniziare.