स्ट्रिंग का उपयोग करने का अर्थ है कि स्ट्रिंग में प्रयुक्त उद्धरण (और अन्य वर्ण) में अस्पष्टता को कम करना। उदाहरण के लिए, जब आप एक स्ट्रिंग को परिभाषित कर रहे होते हैं, तो आप आमतौर पर इसे दोहरे उद्धरण चिह्नों या एकल उद्धरणों में घेर लेते हैं:
"Hello World."
लेकिन क्या होगा अगर मेरे तार में दोहरे उद्धरण हों?
"Hello "World.""
अब मेरे पास अस्पष्टता है - दुभाषिया को पता नहीं है कि मेरी स्ट्रिंग कहाँ समाप्त होती है। यदि मैं अपने दोहरे उद्धरण चिह्नों को रखना चाहता हूं, तो मेरे पास कुछ विकल्प हैं। मैं अपनी स्ट्रिंग के चारों ओर एकल उद्धरण का उपयोग कर सकता हूं:
'Hello "World."'
या मैं अपने उद्धरण से बच सकता हूं:
"Hello \"World.\""
स्लैश से पहले की गई कोई भी बोली बच जाती है , और उसे स्ट्रिंग के मूल्य का हिस्सा समझा जाता है।
जब प्रश्नों की बात आती है, तो MySQL के पास कुछ ऐसे कीवर्ड होते हैं, जिन्हें हम अपने प्रश्नों में उपयोग नहीं कर सकते हैं और कुछ भ्रम पैदा कर सकते हैं। मान लीजिए कि हमारे पास मानों की एक तालिका थी, जहां एक कॉलम का नाम "चयन" था, और हम उसका चयन करना चाहते थे:
SELECT select FROM myTable
अब हमने अपनी क्वेरी में कुछ अस्पष्टता पेश की है। अपनी क्वेरी के भीतर, हम बैक-टिक्स का उपयोग करके उस अस्पष्टता को कम कर सकते हैं:
SELECT `select` FROM myTable
यह फ़ील्ड नामों के चयन में खराब निर्णय का उपयोग करके हमारे द्वारा पेश किए गए भ्रम को दूर करता है।
इसमें से बहुत कुछ आपके द्वारा केवल अपने मूल्यों को पारित करके आपके लिए संभाला जा सकता है mysql_real_escape_string()
। नीचे दिए गए उदाहरण में आप देख सकते हैं कि हम इस फ़ंक्शन के माध्यम से उपयोगकर्ता-प्रस्तुत डेटा पास कर रहे हैं ताकि यह सुनिश्चित हो सके कि यह हमारी क्वेरी के लिए कोई समस्या नहीं होगी:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
अन्य विधियों जैसे बचने तार, के लिए मौजूद हैं add_slashes
, addcslashes
, quotemeta
और भी बहुत कुछ है, हालांकि आपको लगता है कि मिल जाएगा जब लक्ष्य, एक सुरक्षित क्वेरी चलाने के लिए है द्वारा और बड़े डेवलपर्स पसंद करते हैं mysql_real_escape_string
या pg_escape_string
(PostgreSQL के संदर्भ में।