यदि आपके पास फ़ील्ड नामों और इस तरह के मानों वाला नक्शा है:
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...)