सबसे पहले:mysql_escape_string
का उपयोग न करें , इसे हटा दिया गया है (किसी कारण से)!
यदि आपको किसी ऐसे लीगेसी एप्लिकेशन का समर्थन करना है जो mysql
. के माध्यम से डेटाबेस से जुड़ता है एक्सटेंशन (जिसे बहिष्कृत कर दिया गया है
), mysql_real_escape_string
का इस्तेमाल करें
बजाय। अन्यथा तुरंत स्विच करें
करने के लिए mysqli
, जहां तैयार किए गए कथन और बाध्य पैरामीटर उपयोगकर्ता इनपुट से बचने के लिए एक अधिक मजबूत तंत्र प्रदान करते हैं।
उस ने कहा, इसका उत्तर mysql_real_escape_string
और addslashes
:
अंतर #1
addslashes
MySQL कनेक्शन एन्कोडिंग के बारे में कुछ नहीं जानता। यदि आप इसे MySql कनेक्शन द्वारा उपयोग किए गए एन्कोडिंग के अलावा एक एन्कोडिंग का प्रतिनिधित्व करने वाले बाइट्स वाली स्ट्रिंग पास करते हैं, तो यह खुशी से वर्णों के मान वाले सभी बाइट्स से बच जाएगा '
, "
, \
और \x00
. यह सभी वर्णों के समान नहीं हो सकता है '
, "
, \
और \x00
यदि आप 8-बिट एन्कोडिंग और UTF-8 के अलावा किसी अन्य एन्कोडिंग का उपयोग कर रहे हैं। परिणाम यह होगा कि MySql द्वारा प्राप्त स्ट्रिंग दूषित हो जाएगी।
इस बग को ट्रिगर करने के लिए, iconv
का उपयोग करके देखें
अपने वेरिएबल को UTF-16 में बदलने के लिए और फिर इसे addslashes
. के साथ एस्केप करने के लिए . देखें कि आपका डेटाबेस क्या प्राप्त करता है।
यह एक कारण है कि क्यों addslashes
भागने के लिए इस्तेमाल नहीं किया जाना चाहिए।
अंतर #2
addslashes
के विपरीत , mysql_real_escape_string
\r
characters वर्णों से भी बच निकलता है , \n
, और \x1a
. ऐसा प्रतीत होता है कि MySql से बात करते समय इन पात्रों से भी बचना होगा, अन्यथा एक विकृत क्वेरी का परिणाम हो सकता है
यही कारण है कि addslashes
बचने के लिए इस्तेमाल नहीं किया जाना चाहिए।