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

क्या मैं तैयार कथन में तालिका के नाम को माप सकता हूं?

आपके प्रश्न का संक्षिप्त उत्तर "नहीं" है।

सख्त अर्थ में, डेटाबेस स्तर पर, तैयार किए गए कथन केवल पैरामीटर को SQL कथन के "मान" बिट्स के लिए बाध्य करने की अनुमति देते हैं।

इसके बारे में सोचने का एक तरीका यह है कि "ऐसी चीजें जिन्हें बिना किसी अर्थ को बदले कथन के रनटाइम निष्पादन पर प्रतिस्थापित किया जा सकता है"। तालिका नाम उन रनटाइम मानों में से एक नहीं है, क्योंकि यह स्वयं SQL कथन की वैधता निर्धारित करता है (यानी, कौन से कॉलम नाम मान्य हैं) और निष्पादन समय पर इसे बदलने से संभावित रूप से बदल जाएगा कि SQL कथन मान्य था या नहीं।

थोड़ा उच्च स्तर पर, यहां तक ​​​​कि डेटाबेस इंटरफेस में भी जो तैयार स्टेटमेंट पैरामीटर प्रतिस्थापन का अनुकरण करता है, वास्तव में डेटाबेस को तैयार स्टेटमेंट भेजने के बजाय, जैसे कि पीडीओ, जो आपको कहीं भी प्लेसहोल्डर का उपयोग करने की अनुमति दे सकता है (चूंकि प्लेसहोल्डर को भेजे जाने से पहले बदल दिया जाता है) उन सिस्टम में डेटाबेस), टेबल प्लेसहोल्डर का मान एक स्ट्रिंग होगा, और डेटाबेस को भेजे गए SQL के भीतर संलग्न होगा, इसलिए SELECT * FROM ? mytable . के साथ क्योंकि परम वास्तव में SELECT * FROM 'mytable' . भेजना समाप्त कर देगा डेटाबेस में, जो अमान्य SQL है।

आपका सबसे अच्छा दांव सिर्फ

. के साथ जारी रखना है
SELECT * FROM {$mytable}

लेकिन आप बिल्कुल यदि $mytable . है तो आपके पास पहले उन तालिकाओं की श्वेत-सूची होनी चाहिए जिनके विरुद्ध आप जाँच करते हैं उपयोगकर्ता इनपुट से आ रहा है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आईफोन डिवाइस के टाइम ज़ोन में समय कैसे बदलें?

  2. कैसे पता चलेगा कि लेनदेन पहले ही शुरू हो चुका है?

  3. MySQL में पुनरावर्ती चयन क्वेरी कैसे करें?

  4. MySQL इंडेक्स कैसे काम करते हैं?

  5. आप खंड से अद्यतन के लिए लक्ष्य तालिका निर्दिष्ट नहीं कर सकते हैं