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

At lave dynamiske SQL-forespørgsler til en MySQL DB

Hvis du har et kort med feltnavne og værdier som dette:

m := map[string]interface{}{"UserID": 1234, "Age": 18}

så kan du bygge forespørgslen sådan her:

var values []interface{}
var where []string
for _, k := range []string{"userId", "gender", "age", "name", "height", "weight", "ethnicity"} {
    if v, ok := m[k]; ok {
        values = append(values, v)
        where = append(where, fmt.Sprintf("%s = ?", k))
    }
}
r, err := db.QueryRow("SELECT name FROM users WHERE " + strings.Join(where, " AND "), values...)

Dette er ikke modtageligt for SQL-injektion, fordi pladsholdere bruges til dele af forespørgslen uden for applikationens direkte kontrol.

Hvis korttasterne vides at være tilladte feltnavne, så brug dette:

var values []interface{}
var where []string
for k, v := range m {
    values = append(values, v)
    where = append(where, fmt.Sprintf("%s = ?", k))
}
r, err := db.QueryRow("SELECT name FROM users WHERE " + strings.Join(where, " AND "), values...)



  1. Hvordan tvinger jeg Postgres til at bruge et bestemt indeks?

  2. Liste over brugere, der har adgang til databasen

  3. NULL-kompleksiteter – Del 3, Manglende standardfunktioner og T-SQL-alternativer

  4. Sikkerhedskopier en mysql-database og download som en fil