पहला बिंदु:यदि आपको mysql_real_escape_string()
. से कोई त्रुटि मिल रही है , ऐसा इसलिए है क्योंकि आप डेटाबेस से कनेक्ट होने से पहले फ़ंक्शन को कॉल कर रहे हैं।
ऐसा लगता है कि आप क्वेरी चलाने से ठीक पहले डेटाबेस से जुड़ते हैं। तो अपने mm_mysqlquery()
. को कॉल करने से पहले आप जो कुछ भी करते हैं फ़ंक्शन का कोई कनेक्शन नहीं होगा।
mysql_real_escape_string()
फ़ंक्शन को डेटाबेस से लाइव कनेक्शन की आवश्यकता होती है, इसलिए यह कनेक्शन के कैरेक्टर सेट के संबंध में सही तरह से भागने का काम कर सकता है। तो आपको पहले . कनेक्ट करने की आवश्यकता है आप बच निकलते हैं।
वैसे भी ऐसा करना बेहतर है, क्योंकि यदि आप एक ही PHP अनुरोध के दौरान कई प्रश्न पूछते हैं, तो एक बार कनेक्ट करना कम खर्चीला है। और अपने सभी प्रश्नों के लिए समान कनेक्शन का उपयोग करें।
दूसरा, कृपया addslashes()
. का उपयोग करने के लिए सुझाव न लें -- यह mysql_real_escape_string()
. जैसा ही काम नहीं करता है . दोनों विनिमेय नहीं हैं। आपको mysql_real_escape_string()
. का उपयोग करने की आदत डाल लेनी चाहिए ।
तीसरा, आपका sani()
फ़ंक्शन एक आम ग़लतफ़हमी दिखाता है।
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
सामान्य गलत धारणा यह है कि SQL कथन में स्ट्रिंग को सुरक्षित बनाने के लिए आपको इन सभी कार्यों की आवश्यकता होती है। आप नहीं। केवल mysql_real_escape_string()
आवश्यक है। इस उदाहरण के अन्य सभी कार्य SQL इंजेक्शन से बचाव के लिए कुछ नहीं करते हैं।
यदि आप HTML प्रस्तुति में एक स्ट्रिंग आउटपुट करते हैं और आप XSS हमलों के जोखिम को कम करना चाहते हैं, तो वे फ़ंक्शन उपयोगी होते हैं, लेकिन तब mysql_real_escape_string()
अप्रासंगिक है।
प्रत्येक प्रकार की सेनिटाइज़िंग विधि का उसके उपयुक्त संदर्भ में उपयोग करें।