sql >> Databasteknik >  >> RDS >> Mysql

Göra dynamiska SQL-frågor till en MySQL DB

Om du har en karta med fältnamn och värden så här:

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

sedan kan du bygga frågan så här:

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...)

Detta är inte känsligt för SQL-injektion eftersom platshållare används för delar av frågan utanför programmets direkta kontroll.

Om kartnycklarna är kända för att vara tillåtna fältnamn, använd då detta:

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. Arbeta med JDBC Data i Domo

  2. PHP Try and Catch för SQL Insert

  3. Kreativa användningsområden för svarthålsmotorn

  4. Automatisera mysql_secure_installation med echo-kommando via ett skalskript