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

MySQL में सिंगल कोट्स, डबल कोट्स और बैकटिक्स का उपयोग कब करें

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

स्ट्रिंग मानों के लिए सिंगल कोट्स का उपयोग किया जाना चाहिए जैसे VALUES() सूची। डबल कोट्स MySQL द्वारा स्ट्रिंग मानों के लिए भी समर्थित हैं, लेकिन सिंगल कोट्स अन्य RDBMS द्वारा अधिक व्यापक रूप से स्वीकार किए जाते हैं, इसलिए डबल के बजाय सिंगल कोट्स का उपयोग करना एक अच्छी आदत है।

MySQL भी DATE की अपेक्षा करता है और DATETIME '2001-01-01 00:00:00' जैसे स्ट्रिंग्स के रूप में एकल-उद्धृत होने के लिए शाब्दिक मान . दिनांक और समय के साहित्य अधिक विवरण के लिए दस्तावेज़ीकरण, विशेष रूप से हाइफ़न - . का उपयोग करने के विकल्प के लिए दिनांक स्ट्रिंग में एक खंड परिसीमक के रूप में।

इसलिए आपके उदाहरण का उपयोग करते हुए, मैं PHP स्ट्रिंग को दोहरा-उद्धृत करूंगा और 'val1', 'val2' मानों पर सिंगल कोट्स का उपयोग करूंगा। . NULL एक MySQL कीवर्ड है, और एक विशेष (गैर) -मान है, और इसलिए इसे उद्धृत नहीं किया गया है।

इनमें से कोई भी टेबल या कॉलम आइडेंटिफ़ायर आरक्षित शब्द नहीं हैं या उद्धरण की आवश्यकता वाले वर्णों का उपयोग नहीं करते हैं, लेकिन मैंने उन्हें वैसे भी बैकटिक्स के साथ उद्धृत किया है (इस पर बाद में...)।

RDBMS के मूल कार्य (उदाहरण के लिए, NOW() MySQL में) को उद्धृत नहीं किया जाना चाहिए, हालांकि उनके तर्क उसी स्ट्रिंग या पहचानकर्ता को उद्धृत करने वाले नियमों के अधीन हैं जिनका उल्लेख पहले ही किया जा चुका है।

Backtick (`)
table & column ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬───────┐
                      ↓     ↓  ↓  ↓  ↓    ↓  ↓    ↓  ↓    ↓  ↓       ↓
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`, `updated`) 
                       VALUES (NULL, 'val1', 'val2', '2001-01-01', NOW())";
                               ↑↑↑↑  ↑    ↑  ↑    ↑  ↑          ↑  ↑↑↑↑↑ 
Unquoted keyword          ─────┴┴┴┘  │    │  │    │  │          │  │││││
Single-quoted (') strings ───────────┴────┴──┴────┘  │          │  │││││
Single-quoted (') DATE    ───────────────────────────┴──────────┘  │││││
Unquoted function         ─────────────────────────────────────────┴┴┴┴┘    

वैरिएबल इंटरपोलेशन

चर के लिए उद्धरण पैटर्न नहीं बदलते हैं, हालांकि यदि आप सीधे एक स्ट्रिंग में चर को प्रक्षेपित करना चाहते हैं, तो इसे PHP में डबल-उद्धृत किया जाना चाहिए। बस सुनिश्चित करें कि आप SQL में उपयोग के लिए चर से ठीक से बच गए हैं। (तैयार किए गए बयानों का समर्थन करने वाले एपीआई का उपयोग करने की अनुशंसा की जाती है इसके बजाय, SQL इंजेक्शन से सुरक्षा के रूप में )।

// Same thing with some variable replacements
// Here, a variable table name $table is backtick-quoted, and variables
// in the VALUES list are single-quoted 
$query = "INSERT INTO `$table` (`id`, `col1`, `col2`, `date`) VALUES (NULL, '$val1', '$val2', '$date')";

तैयार बयान

तैयार किए गए कथनों के साथ काम करते समय, यह निर्धारित करने के लिए दस्तावेज़ीकरण से परामर्श करें कि कथन के प्लेसहोल्डर को उद्धृत किया जाना चाहिए या नहीं। PHP, PDO और MySQLi में उपलब्ध सबसे लोकप्रिय API, उद्धृत . की अपेक्षा करते हैं प्लेसहोल्डर, जैसा कि अन्य भाषाओं में सबसे अधिक तैयार स्टेटमेंट एपीआई करते हैं:

// PDO example with named parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";

// MySQLi example with ? parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";

पहचानकर्ताओं में बैकटिक उद्धरण की आवश्यकता वाले वर्ण:

MySQL के दस्तावेज़ों के अनुसार , आपको निम्नलिखित वर्ण सेट का उपयोग करके पहचानकर्ता (बैकटिक) को उद्धृत करने की आवश्यकता नहीं है:

<ब्लॉकक्वॉट>

ASCII:[0-9,a-z,A-Z$_] (मूल लैटिन अक्षर, अंक 0-9, डॉलर, अंडरस्कोर)

उदाहरण के लिए आप व्हाइटस्पेस सहित तालिका या कॉलम पहचानकर्ता के रूप में उस सेट से परे वर्णों का उपयोग कर सकते हैं, लेकिन फिर आपको जरूरी उन्हें उद्धृत (बैकटिक) करें।

साथ ही, हालांकि संख्याएं पहचानकर्ताओं के लिए मान्य वर्ण हैं, पहचानकर्ताओं में केवल संख्याएं शामिल नहीं हो सकती हैं। अगर वे ऐसा करते हैं तो उन्हें बैकटिक्स में लपेटा जाना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे पता चलेगा कि MySQLnd सक्रिय ड्राइवर है?

  2. SQL में, क्या दो तालिकाओं के लिए एक दूसरे को संदर्भित करना ठीक है?

  3. mysql-अजगर स्थापित करें (विंडोज़)

  4. रिपोर्ट में दो तालिकाओं से क्वेरी

  5. चेतावनी:हेडर जानकारी को संशोधित नहीं कर सकता - हेडर पहले ही त्रुटि से भेजे गए हैं