2009-12-16 16 views
210

इसमें एक एस्ट्रोफ़े के साथ मूल्य डालने के लिए सही SQL वाक्यविन्यास क्या है?एक एस्ट्रोफ़े (एकल उद्धरण) वाले मान को कैसे सम्मिलित करें?

Insert into Person 
    (First, Last) 
Values 
    'Joe', 
    'O'Brien' 

मुझे एक त्रुटि मिल रही है क्योंकि मुझे लगता है कि ओ के बाद एस्ट्रोफ़े मूल्य के लिए अंतिम टैग है।

+13

कृपया पुष्टि करें कि आप स्वयं को SQL इंजेक्शन हमलों तक नहीं खोल रहे हैं। जहां भी संभव हो पैरामीटर का प्रयोग करें। – Andrew

+0

आप किस स्क्रिप्टिंग भाषा का उपयोग कर रहे हैं? PHP में फ़ंक्शन हैं, उदाहरण के लिए, यह आपके लिए सही तरीके से करने के लिए। – philfreo

+0

यहां एंड्रयू के साथ सहमति: मुझे आशा है कि यह प्रश्न केवल SQL क्लाइंट या "क्वेरी ब्राउज़र" या ऐसे में उत्पादन कोड में कहीं भी SQL के माध्यम से SQL चलाने के संबंध में है। पैरामीटरयुक्त कथन का उपयोग नहीं करना मूर्खता है। – charstar

उत्तर

320
apostrophe भागने

(यानी डबल एकल उद्धरण कैरेक्टर) अपने एसक्यूएल में:

SELECT First, Last FROM Person WHERE Last = 'O''Brien' 

apostrophe:

INSERT INTO Person 
    (First, Last) 
VALUES 
    ('Joe', 'O''Brien') 
       /\ 
      right here 

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

नोट: आप केवल कभी विकास के बाहर प्रश्नों लिखने के बाद से इस मुद्दे के बारे में चिंता करनी चाहिए जब आप मैन्युअल रूप से कच्चे एसक्यूएल इंटरफ़ेस के माध्यम से डेटा को संपादित करने और परीक्षण एक दुर्लभ घटना होना चाहिए। कोड में तकनीक और चौखटे (अपने ढेर के आधार पर) है कि भागने विशेष वर्ण का ख्याल, SQL injection लेने, आदि

+4

$ linkQuestion = str_replace ("'", "' '', $ linkQuestion); (gosh जो पढ़ना मुश्किल है!) – user462990

15

आपको एस्ट्रोफ़े से बचने की जरूरत है। T-SQL में यह, एक डबल apostrophe के साथ है तो अपने insert बयान हो जाता है:

Insert into Person 
(First, Last) 
Values 
'Joe', 'O''Brien' 
+0

AFAIK 'मानों' को ब्रेसिज़ में संलग्न किया जाना चाहिए (जो तब @JustinNiessner के समान जवाब देता है) –

-2

एक बैकटिक (~ कुंजी पर) का उपयोग करने के बजाय,

`O'Brien` 
+3

जब तक कि आप डेटा प्रविष्टि नहीं कर रहे हैं ... – BillyNair

+1

तब समस्या बन जाती है: कैसे सम्मिलित करें backtick? –

27

तुम सिर्फ एकल उद्धरण पर दोगुना करने के लिए है ...

insert into Person (First, Last) 
values ('Joe', 'O''Brien') 
12

क्योंकि देखते हैं एक स्ट्रिंग का प्रारंभ और अंत इंगित करने के लिए एक एकल उद्धरण का उपयोग किया जाता है; आपको इसे बचाना होगा।

संक्षिप्त उत्तर दो एकल उद्धरणों का उपयोग करना है - '' - SQL डेटाबेस के लिए मान को ' के रूप में संग्रहीत करने के लिए।

आप '''' के लिए जाँच करने के लिए, और अगर वे उन्हें बदलना चाहते हैं: REPLACE का उपयोग कर भेजे मूल्यों को साफ़ करने में पर

देखोके साथ स्ट्रिंग में मौजूद है अकेले सिंगल कोट से बचने के लिए।

1

eduffy had a good idea। वह बस अपने कोड उदाहरण में पीछे की ओर मिला। या तो जावास्क्रिप्ट या SQLite में आप एस्ट्रोफ़े को उच्चारण प्रतीक के साथ प्रतिस्थापित कर सकते हैं।

वह (गलती से मुझे यकीन है) ने ओब्रायन में एस्ट्रोफ़े को बदलने की जगह स्ट्रिंग के लिए डिलीमीटर के रूप में उच्चारण प्रतीक रखा। यह वास्तव में ज्यादातर मामलों के लिए एक terrifically सरल समाधान है।

0

apostrophe चरित्र apostrophe के ASCII table lookup मूल्य के साथ CHAR कार्यप्रणाली को कॉल करके डाला जा सकता है, 39. स्ट्रिंग मान तो एक concatenate operator के साथ एक साथ concatenated जा सकता है।

Insert into Person 
    (First, Last) 
Values 
    'Joe', 
    concat('O',char(39),'Brien') 
0

मूल्यों के चारों ओर डबल उद्धरण चिह्नों का उपयोग करें।

insert into Person (First, Last) Values("Joe","O'Brien") 
+2

ध्यान दें कि यह मानक एसक्यूएल नहीं है, हालांकि मुझे पता है कि इनफॉर्मिक्स, नाम लेकिन एक डीबीएमएस, अनुमति देता है यह। आपको यह भी पता होना चाहिए कि आप एक स्ट्रिंग कैसे डालेंगे जैसे 'उन्होंने कहा, "मत करो!"' सिंगल कोट्स और/या डबल कोट्स का उपयोग करके - जो किया जा सकता है: '' उसने कहा, "मत करो!" '' या '"उसने कहा," "मत करो!" "" '। स्वीकार्य उत्तरों के साथ लंबे समय से स्थापित प्रश्न के लिए एक नया उत्तर जोड़ते समय, आपको नई, पूर्ण जानकारी प्रदान करनी होगी। डबल कोट्स का उपयोग करना नया है - लेकिन कुछ डीबीएमएस तक सीमित है; आपको उनमें से कम से कम एक को पहचानने के लिए दर्द करना चाहिए जो उन्हें स्वीकार करता है। –

संबंधित मुद्दे