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

MySqlParameter TableName के रूप में

आप टेबल नाम को पैरामीटर के रूप में पास नहीं कर सकते हैं। ऐसा करने के लिए आपको गतिशील एसक्यूएल का उपयोग करना होगा, इसलिए आपको इसे करने के लिए एकाग्रता को स्ट्रिंग करना होगा, उदाहरण के लिए

  MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)

लेकिन क्योंकि उपयोगकर्ता तालिका नाम इनपुट करते हैं, इसलिए SQL इंजेक्शन संभव है। आप इस SQL ​​​​का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि क्या तालिका कुछ भी पूछने से पहले मौजूद है:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';

(आप इस क्वेरी को पूरी तरह से पैरामीट्रिज़ कर सकते हैं, इसलिए SQL इंजेक्शन समाप्त हो जाएगा)

आम तौर पर, SQL इंजेक्शन से सावधान रहें। लेकिन अगर आप इस आंतरिक का उपयोग करते हैं (उपयोगकर्ता के सामने नहीं), तो SQL इंजेक्शन समस्या नहीं होनी चाहिए।

बेहतर है, आप इससे निपटने के लिए एक संग्रहीत कार्यविधि का निर्माण कर सकते हैं, जैसा कि मेरे दूसरे उत्तर में है:

LINQ के साथ एकीकृत SQL गेटर




  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. एसक्यूएल नेस्टेड ऑर्डर द्वारा?

  3. MySql में संयोजन त्रुटि का अवैध मिश्रण

  4. वह सब चुनें जहां [पहला अक्षर B से शुरू होता है]

  5. Mysql कई संग्रहीत प्रक्रियाओं से एक संग्रहीत कार्यविधि बनाता है