sql >> Databasteknik >  >> RDS >> Mysql

bygga en dynamisk fråga i mysql och golang

För att svara på din fråga om hur man formaterar strängen är det enkla svaret att använda fmt.Sprintf för att strukturera din sträng. Men se längre ner för en snabb notering om hur du använder fmt.Sprintf för db-frågor:

Exempel:

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)

Genom att använda detta för frågor är du säker från injektioner. Med detta sagt kan du bli frestad att modifiera detta och använda db.Exec för skapelser/uppdateringar/borttagningar också. Som en allmän tumregel, om du använder db.Exec med fmt.Sprintf och inte sanerar dina indata först, öppnar du upp dig för sql-injektioner .

GoPlay med enkelt exempel på varför fmt.Sprintf med db.Exec är dåligt:
https://play.golang.org/p/-IWyymAg_Q

Du bör använda db.Query eller db.Prepare på ett lämpligt sätt för att undvika dessa typer av attackvektorer. Du kanske måste ändra kodexemplet ovan för att komma fram till ett injektionssäkert kodavsnitt, men förhoppningsvis gav jag dig tillräckligt för att komma igång.




  1. SQL Konsekutiva poster med antal

  2. Varför skriver PDO ut mitt lösenord när anslutningen misslyckas?

  3. Begränsa värdet på en MySQL-datatyp till ett specifikt intervall (helst inte ENUM)

  4. YEARWEEK() Exempel – MySQL