Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्लेसहोल्डर का उपयोग करना? int . के अलावा किसी अन्य चीज़ के लिए mySql क्वेरी पर जाएँ

आप पहचानकर्ताओं (जैसे तालिका और स्तंभ नाम) के लिए प्लेसहोल्डर का उपयोग नहीं कर सकते हैं, प्लेसहोल्डर मानों के लिए हैं . आप पहचानकर्ताओं के बारे में सोच सकते हैं कि वे गो में चर या फ़ंक्शन नामों के समान हैं, इसलिए पहचानकर्ताओं के लिए प्लेसहोल्डर का उपयोग करने में सक्षम होना eval होने के समान होगा जैसा कि विभिन्न स्क्रिप्टिंग भाषाओं में होता है।

यह आपको fmt.Sprintf . का उपयोग करने के लिए कम कर देता है और जब आप रनटाइम तक पहचानकर्ताओं को नहीं जानते हैं तो SQL बनाने के लिए समान स्ट्रिंग ऑपरेशन:

col := "firstName"
sql := fmt.Sprintf("select %s from persons", col)

लेकिन यह आपको SQL इंजेक्शन के लिए खोलता है और समस्याओं को उद्धृत करता है ताकि आप किसी प्रकार की श्वेतसूची चाहते हैं:

quotedColumns := map[string]string{
    "firstName": "`firstName`",
    "lastName": "`lastName`",
    ...
}

quoted, ok := quotedColumns[columnName]
if !ok {
    // Do something with the error here and run away...
}
sql := fmt.Sprintf("select %s from persons", quoted)

ध्यान दें कि मैंने मानचित्र के मानों में MySQL बैकटिक उद्धरण शामिल किया है। किसी पहचानकर्ता को उद्धृत/भागने के लिए मानक इंटरफ़ेस में कुछ भी नहीं है, इसलिए आपको इसे स्वयं करना होगा। यदि आप पहले से ही श्वेतसूची का नक्शा हाथ से लिख रहे हैं तो आप उद्धरण को हाथ से भी शामिल कर सकते हैं; अन्यथा आप एक जोड़े (उम्मीद) सरल स्ट्रिंग संचालन को उद्धृत करने और करने पर MySQL दस्तावेज़ पढ़कर पहचानकर्ताओं के लिए अपना स्वयं का उद्धरण फ़ंक्शन लिख सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं CSV से MySQL में डेटा कैसे आयात कर सकता हूं?

  2. MySQL त्रुटि:अधिकतम स्तंभ आकार 767 बाइट्स है

  3. MySQL शो टेबल स्टेटस, ऑटो इंक्रीमेंट सही नहीं है

  4. mysql_real_escape_string अपरिभाषित है

  5. java.sql.SQLException:लोकलहोस्ट टेस्ट के लिए कोई उपयुक्त ड्राइवर नहीं मिला