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

opbygning af en dynamisk forespørgsel i mysql og golang

For at besvare dit spørgsmål om, hvordan man formaterer strengen, er det enkle svar at bruge fmt.Sprintf at strukturere din streng. Men se længere nede for en hurtig note om brug af fmt.Sprintf til db-forespørgsler:

Eksempel:

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)

Hvis du bruger dette til forespørgsler, er du sikker mod injektioner. Når det er sagt, kan du blive fristet til at ændre dette og også bruge db.Exec til oprettelser/opdateringer/sletninger. Som en generel tommelfingerregel, hvis du bruger db.Exec med fmt.Sprintf og ikke renser dine input først, åbner du dig for sql-injektioner .

GoPlay med et simpelt eksempel på, hvorfor fmt.Sprintf med db.Exec er dårligt:
https://play.golang.org/p/-IWyymAg_Q

Du skal bruge db.Query eller db.Prepare på en passende måde for at undgå denne slags angrebsvektorer. Du skal muligvis ændre kodeeksemplet ovenfor for at komme med et injektionssikkert uddrag, men forhåbentlig gav jeg dig nok til at komme i gang.




  1. C# MySqlParameter problem

  2. PHP-script til at importere csv-data til mysql

  3. MySql Connector 6.8.2 RC, Entity Framework 6 og Code First

  4. Mysql bruge rækkedata i samme forespørgsel til at vælge en anden række?