Backticks का उपयोग तालिका और स्तंभ पहचानकर्ताओं के लिए किया जाना है, लेकिन केवल तब आवश्यक होता है जब पहचानकर्ता एक MySQL आरक्षित कीवर्ड होता है , या जब पहचानकर्ता में व्हाट्सएप वर्ण या वर्ण सीमित सेट से परे होते हैं (नीचे देखें) तो आरक्षित खोजशब्दों से बचने के लिए अक्सर सिफारिश की जाती है। जब संभव हो तो कॉलम या टेबल आइडेंटिफ़ायर के रूप में, कोटिंग मुद्दे से बचें।
VALUES()
सूची में जैसे स्ट्रिंग मानों के लिए एकल उद्धरण का उपयोग किया जाना चाहिए । स्ट्रिंग मानों के लिए MySQL द्वारा दोहरे उद्धरणों का समर्थन किया जाता है, लेकिन अन्य RDBMS द्वारा एकल उद्धरण अधिक व्यापक रूप से स्वीकार किए जाते हैं, इसलिए डबल के बजाय एकल उद्धरणों का उपयोग करना एक अच्छी आदत है।
MySQL भी अपेक्षा करता है DATE
और DATETIME
शाब्दिक मान एकल-उद्धृत किया जाता है जैसे स्ट्रिंग्स '2001-01-01 00:00:00'
। अधिक विवरण के लिए दिनांक और समय साहित्य के प्रलेखन से परामर्श करें , विशेष -
रूप से तिथि स्ट्रिंग में खंड खंड के रूप में हाइफ़न का उपयोग करने के लिए ।
इसलिए आपके उदाहरण का उपयोग करते हुए, मैं PHP स्ट्रिंग को दोगुना कर दूंगा और मूल्यों पर एकल उद्धरण का उपयोग करूंगा 'val1', 'val2'
। NULL
एक MySQL कीवर्ड है, और एक विशेष (गैर) -वल्यू है, और इसलिए अयोग्य है।
इनमें से कोई भी तालिका या स्तंभ पहचानकर्ता आरक्षित शब्द नहीं हैं या उद्धृत करने के लिए आवश्यक वर्णों का उपयोग करते हैं, लेकिन मैंने उन्हें वैसे भी बैकटिक्स के साथ उद्धृत किया है (इस पर बाद में ...)।
RDBMS के लिए मूल कार्य (उदाहरण के लिए, NOW()
MySQL में) उद्धृत नहीं किए जाने चाहिए, हालांकि उनके तर्क उसी स्ट्रिंग या पहचानकर्ता के अधीन हैं जो पहले से उल्लेख किए गए नियमों को उद्धृत करते हैं।
बैकटिक (`)
तालिका और स्तंभ ───────┬─────┬──┬──┬──┬────┬──┬────┬──┬────┬──┬ ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ क्वेरी = " INSERT INTO` मेज़ '(`id`,` col1`, `col2`,` date`, `updated`)
VALUES (NULL, 'val1', 'val2', '2001-01-01', Now ()) ";
↑ ↑ ↑↑↑↑ ↑ ↑ ↑ ↑ ↑
निर्विवाद कीवर्ड ─────┴┴┴┘ ─────┴┴┴┘ ─────┴┴┴┘ oted ─────┴┴┴┘ ─────┴┴┴┘ ─────┴┴┴┘ ─────┴┴┴┘
एकल-उद्धृत (') तार' '' '
एकल-उद्धृत (') दिनांक quot' │
निर्विवाद समारोह ─────────────────────────────────────────┴┴┴┴┘
परिवर्तनीय प्रक्षेप
वेरिएबल्स के लिए कोटिंग पैटर्न में बदलाव नहीं होता है, हालाँकि यदि आप वेरिएबल को सीधे स्ट्रिंग में इंटरपोल करने का इरादा रखते हैं, तो इसे पीएचपी में डबल-कोटेड होना चाहिए। बस सुनिश्चित करें कि आप SQL में उपयोग के लिए चर को ठीक से बच गए हैं। ( यह SQL इंजेक्शन के खिलाफ सुरक्षा के रूप में इसके बजाय एक एपीआई समर्थन तैयार बयान का उपयोग करने के लिए सिफारिश की है )।
// कुछ चर प्रतिस्थापन के साथ एक ही बात
// यहाँ, एक चर तालिका का नाम $ तालिका backtick-quoted, और चर है
// VALUES सूची में एकल-उद्धृत हैं
$ क्वेरी = "INSERT INTO ` $ table` ( `id`,` col1`, `col2`,` date`) मूल्यों (शून्य, '$ VAL1' , '$ val2' , '$ तारीख' ) ";
तैयार बयान
तैयार बयानों के साथ काम करते समय, यह निर्धारित करने के लिए प्रलेखन से परामर्श करें कि क्या कथन के प्लेसहोल्डर को उद्धृत किया जाना चाहिए या नहीं। PHP, PDO और MySQLi में उपलब्ध सबसे लोकप्रिय API, अनारक्षित प्लेसहोल्डर्स से अपेक्षा करते हैं, जैसा कि अन्य भाषाओं में सबसे अधिक तैयार स्टेटमेंट APIs करते हैं:
// 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, डॉलर, अंडरस्कोर)
आप उदाहरण के लिए व्हाट्सएप सहित तालिका या स्तंभ पहचानकर्ता के रूप में उस सेट से परे वर्णों का उपयोग कर सकते हैं, लेकिन तब आपको उन्हें (बैकटिक को) उद्धृत करना होगा ।
"tablename"
, और एकल उद्धरण शाब्दिक उदाहरण के लिए होते हैं'this is a some text'
। Back-ticks का उपयोग कभी मानक SQL में नहीं किया जाता है। (यदि आपको एक पहचानकर्ता में एक डबल उद्धरण शामिल करने की आवश्यकता है, तो इसे दो बार टाइप करें"odd""tablename"
। इसी तरह, शाब्दिक में दोहरे एकल उद्धरण'Conan O''Brien'
। जैसे ।)