स्ट्रिंग अक्षर
एकल उद्धरणों से बचना '
उन्हें दोगुना करके -> ''
निश्चित रूप से मानक तरीका और कार्य है:
'user's log' -- incorrect syntax (unbalanced quote)
'user''s log'
प्लेन सिंगल कोट्स (ASCII / UTF-8 कोड 39), माइंड यू, बैकटिक्स नहीं `
, जिसका Postgres में कोई विशेष उद्देश्य नहीं है (कुछ अन्य RDBMS के विपरीत) और डबल-उद्धरण नहीं "
, पहचानकर्ताओं के लिए उपयोग किया जाता है।
पुराने संस्करणों में या यदि आप अभी भी standard_conforming_strings = off
के साथ चलते हैं या, आम तौर पर, यदि आप अपनी स्ट्रिंग को E
. के साथ जोड़ते हैं Posix एस्केप स्ट्रिंग सिंटैक्स घोषित करने के लिए , आप बैकस्लैश से भी बच सकते हैं \
:
E'user\'s log'
बैकस्लैश स्वयं एक और बैकस्लैश से बच निकला है। लेकिन यह आम तौर पर बेहतर नहीं है।
यदि आपको कई एकल उद्धरण या भागने की कई परतों से निपटना है, तो आप PostgreSQL में डॉलर-उद्धृत स्ट्रिंग्स के साथ नरक को उद्धृत करने से बच सकते हैं। :
'escape '' with '''''
$$escape ' with ''$$
डॉलर-उद्धरणों के बीच भ्रम से बचने के लिए, प्रत्येक जोड़ी में एक अद्वितीय टोकन जोड़ें:
$token$escape ' with ''$token$
जिसे किसी भी स्तर पर नेस्ट किया जा सकता है:
$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$
ध्यान दें अगर $
आपके क्लाइंट सॉफ़्टवेयर में वर्ण का विशेष अर्थ होना चाहिए। इसके अलावा आपको इससे बचना पड़ सकता है। मानक PostgreSQL क्लाइंट जैसे psql या pgAdmin के साथ ऐसा नहीं है।
यह सब plpgsql फ़ंक्शंस या एड-हॉक SQL कमांड लिखने के लिए बहुत उपयोगी है। जब उपयोगकर्ता इनपुट संभव हो, तो यह आपके आवेदन में SQL इंजेक्शन के खिलाफ सुरक्षा के लिए तैयार कथन या किसी अन्य विधि का उपयोग करने की आवश्यकता को कम नहीं कर सकता है। @ क्रेग का जवाब उस पर अधिक है। अधिक विवरण:
- पोस्टग्रेज फ़ंक्शन बनाम तैयार क्वेरी में SQL इंजेक्शन
पोस्टग्रेज के अंदर के मान
डेटाबेस के अंदर मूल्यों के साथ व्यवहार करते समय, स्ट्रिंग्स को ठीक से उद्धृत करने के लिए कुछ उपयोगी कार्य होते हैं:
quote_literal()
याquote_nullable()
- बाद वाला स्ट्रिंग आउटपुट करता हैNULL
शून्य इनपुट के लिए। (quote_ident()
भी है करने के लिए दोहरा-उद्धरण तार जहां मान्य SQL पहचानकर्ता प्राप्त करने की आवश्यकता है ।)format()
प्रारूप विनिर्देशक के साथ%L
quote_nullable()
. के बराबर है .
पसंद करें:format('%L', string_var)
- <स्ट्राइक>
concat()
स्ट्राइक> या <स्ट्राइक>concat_ws()
स्ट्राइक> आमतौर पर इस उद्देश्य के लिए अच्छा नहीं है क्योंकि वे नहीं करते हैं नेस्टेड सिंगल कोट्स और बैकस्लैश से बचें।