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