sql >> Databáze >  >> RDS >> Mysql

Vytváření dynamických SQL dotazů do databáze MySQL

Pokud máte mapu s názvy polí a hodnotami, jako je tato:

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

pak můžete vytvořit dotaz takto:

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

To není náchylné k vkládání SQL, protože zástupné symboly se používají pro části dotazu mimo přímou kontrolu aplikace.

Pokud je známo, že mapovací klíče jsou povolenými názvy polí, použijte toto:

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. SQL Odstranění řádků na základě jiné tabulky

  2. MySQL - Jak odstranit z tabulky, když vnořený výběr používá tuto tabulku?

  3. Nelze se připojit ke vzdálenému mysql z Mac lion

  4. TO_CHAR(číslo) Funkce v Oracle