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


633

मैं प्रश्न लिखने का सबसे अच्छा तरीका सीखने की कोशिश कर रहा हूं। मैं भी सुसंगत होने के महत्व को समझता हूं। अब तक, मैंने बिना किसी वास्तविक विचार के एकल उद्धरणों, दोहरे उद्धरणों और बैकटिक्स का बेतरतीब ढंग से उपयोग किया है।

उदाहरण:

$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';

इसके अलावा, ऊपर के उदाहरण में, कि विचार करें table, col1, val1, आदि चर हो सकता है।

इसके लिए मानक क्या है? आप क्या करते हैं?

मैं यहाँ पर लगभग 20 मिनट से इसी तरह के सवालों के जवाब पढ़ रहा हूँ, लेकिन ऐसा लगता है कि इस सवाल का कोई निश्चित जवाब नहीं है।


16
ध्यान दें कि यह एक बहुत ही MySQL विशिष्ट प्रश्न है। एसक्यूएल इन जनरल (यानी आईएसओ / एएनएसआई एसक्यूएल) में उद्धरणों का एक अलग सेट होता है: दोहरे उद्धरण सीमांकित पहचानकर्ताओं के लिए होते हैं, उदाहरण के लिए "tablename", और एकल उद्धरण शाब्दिक उदाहरण के लिए होते हैं 'this is a some text'। Back-ticks का उपयोग कभी मानक SQL में नहीं किया जाता है। (यदि आपको एक पहचानकर्ता में एक डबल उद्धरण शामिल करने की आवश्यकता है, तो इसे दो बार टाइप करें "odd""tablename"। इसी तरह, शाब्दिक में दोहरे एकल उद्धरण 'Conan O''Brien'। जैसे ।)
jarlh

जवाबों:


609

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, डॉलर, अंडरस्कोर)

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


43
" लेकिन एकल उद्धरण अन्य आरडीबीएमएस द्वारा अधिक व्यापक रूप से स्वीकार किए जाते हैं " - स्ट्रिंग मानक के लिए एकल उद्धरण का उपयोग (और आवश्यक) SQL मानक द्वारा परिभाषित किया गया है
a_horse_with_no_name

@a_horse_with_no_name लगभग कोई भी एएनएसआई MySQL का उपयोग नहीं करता है ('|' स्ट्रिंग कॉन्कैट के लिए - वास्तव में?)
अच्छा व्यक्ति

3
यह सच नहीं है: "MySQL भी DATE और DATETIME शाब्दिक मानों को '2001-01-01 00:00:00' जैसे स्ट्रिंग्स के रूप में उद्धृत करने की उम्मीद करता है
Kick_the_BUCKET

3
@evilReiko MySQL डॉक्स को उर्फ ​​स्पष्ट रूप से उद्धृत करते हुए प्रतीत नहीं होता है। यह उपनामों के लिए सिंगल, डबल या बैकटिक को स्वीकार करेगा, लेकिन यह विभिन्न ANSI SQL मोड से प्रभावित हो सकता है। मुझे यकीन नहीं है कि उपनामों के लिए एसक्यूएल कल्पना की क्या आवश्यकता है - व्यक्तिगत प्राथमिकता: स्थिरता के लिए मैं उन्हें कॉलम आइडेंटिफ़ायर के रूप में ही उद्धृत करता हूं - अर्थात, यदि आवश्यक हो तो मैं उन्हें बैकटिक करता हूं, या यदि नहीं तो उन्हें छोड़ दें। मैं उपनामों पर एकल या दोहरे उद्धरण चिह्नों का उपयोग नहीं करता।
माइकल बेर्कोव्स्की

2
@GuneyOzsan हां, बहुत कमजोर। तालिका के नाम के लिए कभी भी एक चर का उपयोग न करें जब तक कि इसे स्वीकार्य तालिका नामों की सूची के विरुद्ध मान्य नहीं किया गया है - अनुमेय नामों की एक सरणी बनाएं और सूची में चर से मेल खाने के लिए इसे सुरक्षित करने के लिए कुछ मिलान करें। अन्यथा आप उपयोग के लिए तालिका नाम चर से सुरक्षित रूप से बच नहीं सकते।
माइकल बर्कोव्स्की

121

MySQL में दो प्रकार के उद्धरण हैं:

  1. ' स्ट्रिंग शाब्दिक संलग्न करने के लिए
  2. ` तालिका और स्तंभ नामों जैसे पहचानकर्ताओं को संलग्न करने के लिए

और फिर "एक विशेष मामला है। यह के लिए इस्तेमाल किया जा सकता एक MySQL सर्वर के आधार पर एक समय में उपर्युक्त उद्देश्यों में से sql_mode:

  1. डिफ़ॉल्ट रूप से "चरित्र का उपयोग स्ट्रिंग शाब्दिक की तरह संलग्न करने के लिए किया जा सकता है'
  2. में ANSI_QUOTESमोड "चरित्र जैसे पहचानकर्ता संलग्न किया जा सकता है`

निम्न क्वेरी SQL मोड के आधार पर विभिन्न परिणाम (या त्रुटियां) उत्पन्न करेगी:

SELECT "column" FROM table WHERE foo = "bar"

ANSI_QUOTES अक्षम किया गया

क्वेरी स्ट्रिंग शाब्दिक का चयन करेगी "column"जहां स्तंभ fooस्ट्रिंग के बराबर है"bar"

ANSI_QUOTES सक्षम किया गया

क्वेरी उस कॉलम का चयन करेगी columnजहां कॉलम कॉलम fooके बराबर हैbar

कब क्या उपयोग करना है

  • मेरा सुझाव है कि आप इसका उपयोग "करने से बचें ताकि आपका कोड SQL मोड से स्वतंत्र हो जाए
  • हमेशा पहचानकर्ताओं को उद्धृत करें क्योंकि यह एक अच्छा अभ्यास है (इसलिए SO पर कुछ प्रश्न इस पर चर्चा करते हैं)

32

(आपके प्रश्न की SQL प्रकृति के बारे में ऊपर अच्छे उत्तर हैं, लेकिन यह तब भी प्रासंगिक हो सकता है जब आप PHP में नए हों।)

शायद यह उल्लेख करना महत्वपूर्ण है कि PHP सिंगल और डबल उद्धृत स्ट्रिंग्स को अलग-अलग संभालती है ...

एकल-उद्धृत स्ट्रिंग 'शाब्दिक' हैं और बहुत WYSIWYG तार हैं। डबल-उद्धृत स्ट्रिंग्स की व्याख्या संभव चर-प्रतिस्थापन के लिए PHP द्वारा की जाती है (PHP में बैकटिक्स वास्तव में तार नहीं हैं; वे शेल में एक कमांड निष्पादित करते हैं और परिणाम वापस करते हैं)।

उदाहरण:

$foo = "bar";
echo 'there is a $foo'; // There is a $foo
echo "there is a $foo"; // There is a bar
echo `ls -l`; // ... a directory list

23

Backticks का उपयोग आम तौर पर एक के identifierरूप में इंगित करने के लिए किया जाता है और सुरक्षित रूप से आरक्षित खोजशब्दों के उपयोग से सुरक्षित होता है

उदाहरण के लिए:

Use `database`;

यहां बैकटिक्स सर्वर को यह समझने में मदद करेगा कि databaseवास्तव में डेटाबेस का नाम है, डेटाबेस पहचानकर्ता का नहीं।

टेबल नामों और फ़ील्ड नामों के लिए समान किया जा सकता है। यह एक बहुत अच्छी आदत है अगर आप अपने डेटाबेस पहचानकर्ता को बैकटिक्स के साथ लपेटते हैं।

बैकटिक्स के बारे में अधिक समझने के लिए इस उत्तर को जांचें ।


अब दोहरे उद्धरण और एकल उद्धरण के बारे में (माइकल पहले ही उल्लेख कर चुका है)।

लेकिन, एक मूल्य को परिभाषित करने के लिए आपको एकल या दोहरे उद्धरण चिह्नों का उपयोग करना होगा। एक और उदाहरण देखते हैं।

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, title1);

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

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, 'title1');

अब, PHP के साथ संयोजन में, दोहरे उद्धरण और एकल उद्धरण आपके क्वेरी लेखन के समय को बहुत आसान बनाते हैं। आइए आपके प्रश्न में क्वेरी का एक संशोधित संस्करण देखें।

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

अब, PHP में दोहरे उद्धरण चिह्नों का उपयोग करते हुए, आप चर बनाएंगे $val1, और $val2उनके मूल्यों का उपयोग करने के लिए इस प्रकार एक पूरी तरह से मान्य क्वेरी बनाएंगे । पसंद

$val1 = "my value 1";
$val2 = "my value 2";
$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

कर देंगें

INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, 'my value 1', 'my value 2')

15

MySQL में, इन प्रतीकों एक प्रश्न परिसीमित करने के लिए उपयोग किया जाता है `, ", 'और ()

  1. "या 'स्ट्रिंग-जैसे मानों को संलग्न करने के लिए उपयोग किया जाता है "26-01-2014 00:00:00"या '26-01-2014 00:00:00'। इन प्रतीकों केवल तार के लिए कर रहे हैं, कुल नहीं कार्यों की तरह now, sumया max

  2. ` तालिका या स्तंभ नामों को संलग्न करने के लिए उपयोग किया जाता है, जैसे select `column_name` from `table_name` where id='2'

  3. (और )बस एक क्वेरी के कुछ हिस्सों को शामिल करें जैसे select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'


13

MySQL और PHP में स्ट्रिंग शाब्दिक समान हैं।

एक स्ट्रिंग बाइट्स या वर्णों का एक क्रम है, जो एकल उद्धरण ("'") या दोहरे उद्धरण ("" ") वर्णों के भीतर संलग्न है।

इसलिए यदि आपके स्ट्रिंग में सिंगल कोट्स हैं, तो आप स्ट्रिंग को कोट करने के लिए डबल कोट्स का उपयोग कर सकते हैं, या यदि इसमें डबल कोट्स हैं, तो आप स्ट्रिंग को कोट करने के लिए सिंगल कोट्स का उपयोग कर सकते हैं। लेकिन अगर आपके स्ट्रिंग में एकल उद्धरण और दोहरे उद्धरण दोनों शामिल हैं, तो आपको उस स्ट्रिंग से बचने की ज़रूरत है जो स्ट्रिंग का उपयोग करती थी।

अधिकतर, हम SQL स्ट्रिंग मान के लिए एकल उद्धरण का उपयोग करते हैं, इसलिए हमें PHP स्ट्रिंग के लिए दोहरे उद्धरण चिह्नों का उपयोग करने की आवश्यकता है।

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, 'val1', 'val2')";

और आप PHP के दोहरे-उद्धृत स्ट्रिंग में एक चर का उपयोग कर सकते हैं:

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, '$val1', '$val2')";

लेकिन अगर $val1या $val2एकल उद्धरण शामिल हैं, जो आपके SQL को गलत बना देगा। इसलिए आपको इसे sql में उपयोग करने से पहले बचकर निकलने की आवश्यकता है; जो है उसके mysql_real_escape_stringलिए है (हालांकि एक तैयार बयान बेहतर है।)


12

PHP और MySQL के संयोजन में, दोहरे उद्धरण और एकल उद्धरण आपके क्वेरी-लेखन के समय को इतना आसान बनाते हैं।

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

अब, मान लीजिए कि आप MySQL क्वेरी में एक डायरेक्ट पोस्ट वेरिएबल का उपयोग कर रहे हैं, तो इसे इस तरह से उपयोग करें:

$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";

यह MySQL में PHP चर का उपयोग करने के लिए सबसे अच्छा अभ्यास है।


इसलिए दोहरे उद्धरण लचीले हैं, लेकिन पहचानकर्ता के रूप में उपयोग नहीं किए जा सकते हैं।
राहवेंदक ३१'१६ को hav:३

कृपया कभी भी सीधे सीधे अपनी क्वेरी में बिना इनपुट उपयोगकर्ता इनपुट का उपयोग न करें!
जाँगल

@jankal यह केवल उदाहरण है। मैंने निर्दिष्ट किया है कि यदि आप प्रत्यक्ष उपयोगकर्ता इनपुट का उपयोग कर रहे हैं तो n ...........
विपुल सोरठिया

@vipulsorathiya कृपया अपने उत्तर में निर्दिष्ट करें कि POST चर बच जाए। अब आप उन्हें अपनी क्वेरी में सीधे उपयोग करने की ओर इशारा कर रहे हैं। शुरुआत करने वालों के लिए बुरा ...
RFLdev

12

यहाँ कई सहायक उत्तर दिए गए हैं, आम तौर पर दो बिंदुओं में परिणत होते हैं।

  1. BACKTICKS (`) का उपयोग पहचानकर्ता नामों के आसपास किया जाता है।
  2. SINGLE QUOTES (') का उपयोग मानों के आसपास किया जाता है।

और जैसा कि @MichaelBerkowski ने कहा

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

वहाँ हालांकि जहां एक पहचानकर्ता न तो एक हो सकता है एक मामला है आरक्षित कीवर्ड या शामिल करने से व्हाइटस्पेस या सीमित सेट से परे पात्रों लेकिन जरूरी उनके आसपास बैकटिक आवश्यकता होती है।

उदाहरण

123E10एक मान्य पहचानकर्ता नाम है, लेकिन एक मान्य INTEGERशाब्दिक भी है ।

[विस्तार में जाने के बिना कि आपको इस तरह का एक पहचानकर्ता नाम कैसे मिलेगा], मान लीजिए कि मैं नाम से एक अस्थायी तालिका बनाना चाहता हूं 123456e6

बैकटिक्स पर कोई त्रुटि नहीं।

DB [XXX]> create temporary table `123456e6` (`id` char (8));
Query OK, 0 rows affected (0.03 sec)

बैकटिक्स का उपयोग नहीं करने पर त्रुटि।

DB [XXX]> create temporary table 123451e6 (`id` char (8));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1

हालांकि, 123451a6एक बिल्कुल ठीक पहचानकर्ता नाम है (बिना पीछे टिक के)।

DB [XXX]> create temporary table 123451a6 (`id` char (8));
Query OK, 0 rows affected (0.03 sec)

यह पूरी तरह से है क्योंकि 1234156e6एक घातीय संख्या भी है।


10

यदि टेबल कॉल और मान चर हैं तो दो तरीके हैं:

डबल उद्धरण ""के साथ पूरी क्वेरी:

$query = "INSERT INTO $table_name (id, $col1, $col2)
                 VALUES (NULL, '$val1', '$val2')";

या

 $query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")
               VALUES (NULL, '".$val1."', '".$val2."')";

एकल उद्धरण के साथ '':

$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')
             VALUES (NULL, '.$val1.', '.$val2.')';

``जब एक कॉलम / मान नाम MySQL आरक्षित कीवर्ड के समान होता है, तो टिक टिक का उपयोग करें ।

नोट: यदि आप एक टेबल नाम के साथ एक कॉलम नाम को चिह्नित कर रहे हैं तो इस तरह वापस टिक का उपयोग करें:

`table_name``column_name` <- नोट: . बैक टिक्सेस से बाहर रखें ।


8

VALUES () सूची में स्ट्रिंग मानों के लिए एकल उद्धरण का उपयोग किया जाना चाहिए।

आम तौर पर एक पहचानकर्ता को इंगित करने के लिए बैकटिक्स का उपयोग किया जाता है और साथ ही आरक्षित खोजशब्दों के उपयोग से गलती से सुरक्षित रहता है।

PHP और MySQL के संयोजन में, दोहरे उद्धरण और एकल उद्धरण आपके क्वेरी लेखन समय को इतना आसान बनाते हैं।


4

सभी (अच्छी तरह से समझाया गया) उत्तरों के अलावा, निम्नलिखित उल्लेख नहीं किया गया है और मैं इस प्रश्नोत्तर पर अक्सर आता हूं।

संक्षेप में; MySQL सोचता है कि आप अपनी खुद की टेबल / कॉलम पर गणित करना चाहते हैं और "ई-मेल" जैसे हाइफ़न की व्याख्या e माइनस के रूप में करते हैं mail


डिस्क्लेमर: इसलिए मैंने सोचा कि मैं इसे "FYI" प्रकार के उत्तर के रूप में जोड़ूंगा, जो डेटाबेस के साथ काम करने के लिए पूरी तरह से नए हैं और जो पहले से वर्णित तकनीकी शब्दों को नहीं समझ सकते हैं।


1

SQL सर्वर और MySQL, PostgreySQL, Oracle डबल कोट्स (") को नहीं समझता है। इस प्रकार आपकी क्वेरी डबल कोट्स (") से मुक्त होनी चाहिए और केवल सिंगल कोट्स (') का उपयोग करना चाहिए।

बैक-ट्रिप (`) एसक्यूएल में उपयोग करने के लिए वैकल्पिक है और इसका उपयोग टेबल नाम, डीबी नाम और कॉलम नामों के लिए किया जाता है।

यदि आप MySQL को कॉल करने के लिए अपने बैक-एंड में क्वेरी लिखने की कोशिश कर रहे हैं, तो आप क्वेरी को एक चर में असाइन करने के लिए दोहरे उद्धरण चिह्नों (") या एकल उद्धरणों (') का उपयोग कर सकते हैं:

let query = "select id, name from accounts";
//Or
let query = 'select id, name from accounts';

यदि whereआपकी क्वेरी में / या insertमान और / या मान के लिए एक प्रयास है updateजो स्ट्रिंग है तो इन मानों के लिए एकल उद्धरण (') का उपयोग करें:

let querySelect = "select id, name from accounts where name = 'John'";
let queryUpdate = "update accounts set name = 'John' where id = 8";
let queryInsert = "insert into accounts(name) values('John')";

//Please not that double quotes are only to be used in assigning string to our variable not in the query
//All these below will generate error

let querySelect = 'select id, name from accounts where name = "John"';
let queryUpdate = 'update accounts set name = "John" where id = 8';
let queryInsert = 'insert into accounts(name) values("John")';

//As MySQL or any SQL doesn't understand double quotes("), these all will generate error.

यदि आप दोहरे उद्धरण चिह्नों (") और एकल उद्धरणों (') का उपयोग करते समय इस भ्रम से बाहर रहना चाहते हैं, तो एकल उद्धरणों (') के साथ चिपके रहने की सिफारिश करेंगे। इसमें बैकस्लैश (जैसे) शामिल होंगे:

let query = 'select is, name from accounts where name = \'John\'';

दोहरे (") या एकल (') उद्धरणों के साथ समस्या तब उत्पन्न होती है जब हमें कुछ मूल्य गतिशील निर्दिष्ट करने और कुछ स्ट्रिंग समंजन करने की आवश्यकता होती है जैसे:

let query = "select id, name from accounts where name = " + fName + " " + lName;
//This will generate error as it must be like name = 'John Smith' for SQL
//However our statement made it like name = John Smith

//In order to resolve such errors use
let query = "select id, name from accounts where name = '" + fName + " " + lName + "'";

//Or using backslash(\)
let query = 'select id, name from accounts where name = \'' + fName + ' ' + lName + '\'';

अगर आगे की मंजूरी चाहिए तो जावास्क्रिप्ट में उद्धरणों का पालन करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.