Mysql
 sql >> база данни >  >> RDS >> Mysql

Извършване на динамични SQL заявки към MySQL DB

Ако имате карта с имена на полета и стойности като това:

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

след това можете да изградите заявката по следния начин:

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

Това не е податливо на SQL инжектиране, тъй като заместителите се използват за части от заявката извън директния контрол на приложението.

Ако е известно, че ключовете на картата са разрешени имена на полета, използвайте това:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкнете възможно най-ниското уникално цяло число по атомен начин в MySql

  2. Проверете за валидно име на SQL колона

  3. Opencart 1.5.1.3 показва специална цена с начална и крайна дата на страницата за показване на продукта

  4. Получаване на произволни данни от MySQL база данни, но без повтарящи се данни

  5. PreparedStatement игнорира параметрите в заявката:java.sql.SQLException:Индекс на параметър извън обхвата (1> брой параметри, което е 0)