एक स्ट्रिंग से बचने का मतलब उस स्ट्रिंग में उपयोग किए गए उद्धरणों (और अन्य वर्णों) में अस्पष्टता को कम करना है। उदाहरण के लिए, जब आप एक स्ट्रिंग को परिभाषित कर रहे होते हैं, तो आप आमतौर पर इसे डबल कोट्स या सिंगल कोट्स में घेरते हैं:
"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
(पोस्टग्रेएसक्यूएल के संदर्भ में।