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

पीडीओ स्टेटमेंट में कॉलम के नाम से बचना

सीमांकित पहचानकर्ता करने का एएनएसआई मानक तरीका है:

SELECT "field1" ...

और अगर नाम में " है, तो उसे दोगुना कर दें:

SELECT "some""thing" ...

दुर्भाग्य से यह डिफ़ॉल्ट सेटिंग्स के साथ MySQL में काम नहीं करता है, क्योंकि MySQL को लगता है कि डबल कोट्स स्ट्रिंग अक्षर के लिए सिंगल कोट्स के विकल्प हैं। इस मामले में आपको बैकटिक्स (ब्योर्न द्वारा उल्लिखित) और बैकस्लैश-एस्केपिंग का उपयोग करना होगा।

बैकस्लैश एस्केपिंग सही ढंग से करने के लिए, आप करेंगे mysql_real_escape_string की आवश्यकता है, क्योंकि यह चरित्र-सेट-निर्भर है। लेकिन बात विवादास्पद है, क्योंकि न तो mysql_real_escape_string और न ही ऐडलैश बैककोट कैरेक्टर से बचते हैं . यदि आप सुनिश्चित हो सकते हैं कि कॉलम नामों में कभी भी गैर-ASCII वर्ण नहीं होंगे, तो आप केवल मैन्युअल रूप से बैकस्लैश-` और \ वर्णों से बचकर दूर हो सकते हैं।

किसी भी तरह से, यह अन्य डेटाबेस के साथ संगत नहीं है। आप कॉन्फ़िगरेशन विकल्प ANSI_QUOTES सेट करके MySQL को ANSI सिंटैक्स की अनुमति देने के लिए कह सकते हैं। इसी तरह, SQL सर्वर भी डिफ़ॉल्ट रूप से दोहरे उद्धरण चिह्नों पर चोक करता है; यह अभी तक एक और वाक्य रचना का उपयोग करता है, अर्थात् वर्ग कोष्ठक। फिर से, आप इसे 'quoted_identifier' विकल्प के साथ ANSI सिंटैक्स का समर्थन करने के लिए कॉन्फ़िगर कर सकते हैं।

सारांश:यदि आपको केवल MySQL संगतता की आवश्यकता है:

ए। बैकक्वॉट्स का उपयोग करें और नामों में बैकक्वॉट, बैकस्लैश और नल कैरेक्टर को अस्वीकार करें क्योंकि उनसे बचना अविश्वसनीय है

यदि आपको क्रॉस-डीबीएमएस संगतता की आवश्यकता है, या तो:

बी। दोहरे उद्धरण चिह्नों का उपयोग करें और कॉन्फ़िगरेशन को उचित रूप से बदलने के लिए MySQL/SQL-Server उपयोगकर्ताओं की आवश्यकता है। नाम में दोहरे-उद्धरण वर्णों को अस्वीकार करें (क्योंकि Oracle उन्हें संभाल नहीं सकता है, यहां तक ​​​​कि बच भी नहीं सकता)। या,

सी। MySQL बनाम SQL सर्वर बनाम अन्य के लिए एक सेटिंग है, और उसके आधार पर या तो बैकक्वाट, स्क्वायर ब्रैकेट, या डबल-कोट सिंटैक्स का उत्पादन करें। डबल-कोट्स और बैकस्लैश/बैकक्वाट/नल दोनों को अस्वीकार करें।

यह कुछ ऐसा है जिसकी आप आशा करते हैं कि डेटा एक्सेस लेयर के लिए एक फ़ंक्शन होगा, लेकिन PDO ऐसा नहीं करता है।

सारांश का सारांश:मनमाने ढंग से कॉलम नाम एक समस्या है, अगर आप इसकी मदद कर सकते हैं तो इससे बचा जा सकता है।

सारांश के सारांश का सारांश:gnnnnnnnnnnnh.



  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. आप डेटाटाइम फ़ील्ड का यूटीसी कैसे प्राप्त करते हैं?

  4. PHP/MySQL के साथ मैसेजिंग सिस्टम

  5. MySQL संग्रहीत प्रक्रिया में डायनामिक SQL कैसे प्राप्त करें