sql >> Database >  >> RDS >> Mysql

een dynamische query bouwen in mysql en golang

Om je vraag te beantwoorden over het opmaken van de string, is het simpele antwoord het gebruik van fmt.Sprintf om je string te structureren. Echter zie verderop voor een korte opmerking over het gebruik van fmt.Sprintf voor db-query's:

Voorbeeld:

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)

Als u dit voor vragen gebruikt, bent u beschermd tegen injecties. Dat gezegd hebbende, zou je in de verleiding kunnen komen om dit te wijzigen en db.Exec ook te gebruiken voor creaties/updates/verwijderingen. Als algemene vuistregel geldt:als u db.Exec gebruikt met fmt.Sprintf en uw invoer niet eerst zuivert, stelt u zich open voor sql-injecties .

GoPlay met een eenvoudig voorbeeld van waarom fmt.Sprintf met db.Exec slecht is:
https://play.golang.org/p/-IWyymAg_Q

Gebruik db.Query of db.Prepare op een gepaste manier om dit soort aanvalsvectoren te vermijden. Mogelijk moet u het bovenstaande codevoorbeeld aanpassen om een ​​injectieveilig fragment te maken, maar hopelijk heb ik u genoeg gegeven om aan de slag te gaan.




  1. Wat zijn de verschillen tussen utf8_general_ci en utf8_unicode_ci?

  2. hoe SQL-query te schrijven in cakephp?

  3. Query voor gebruikers die niet in een specifieke groep zitten? (Wilde BEHALVE gebruiken, maar het lijkt erop dat MySQL dit niet ondersteunt)

  4. Maak meerdere Postgres-instanties op dezelfde machine