यह मेरे लिए एक शहरी किंवदंती की तरह लगता है।
bin2hex()
इनपुट में प्रत्येक बाइट को दो . में मैप करता है आउटपुट में बाइट्स ('a'
-> '61'
), इसलिए आपको क्वेरी निष्पादित करने वाली स्क्रिप्ट की स्मृति में उल्लेखनीय वृद्धि पर ध्यान देना चाहिए - इसे सम्मिलित करने के लिए बाइनरी डेटा की बाइट लंबाई जितनी अधिक मेमोरी का उपयोग करना चाहिए।
इसके अलावा, इसका तात्पर्य यह है कि चल रहा है bin2hex()
एक लंबी स्ट्रिंग पर बहुत लगता है mysql_real_escape string()
चलाने से ज्यादा लंबा , जो - जैसा कि MySQL के दस्तावेज़ों में बताया गया हैए> - बस 6 वर्णों से बच निकलता है:NULL
, \r
, \n
, \
, ,
और 'कंट्रोल-जेड'।
वह PHP भाग के लिए था, अब MySQL के लिए:सर्वर को डेटा को सही ढंग से संग्रहीत करने के लिए रिवर्स ऑपरेशन करने की आवश्यकता है। किसी भी फ़ंक्शन को उलटने में मूल ऑपरेशन जितना लंबा समय लगता है - mysql_real_escape_string()
का उल्टा फ़ंक्शन बच गए मानों को बदलने की जरूरत है (\\
) न छूटे लोगों के साथ (\
), जबकि bin2hex()
. के विपरीत प्रत्येक बाइट टपल को प्रतिस्थापित करने की आवश्यकता होगी एक नए बाइट के साथ।
कॉल करने के बाद से mysql_real_escape_string()
बाइनरी डेटा पर सुरक्षित है (MySQL और PHP के दस्तावेज़ों के अनुसारए> या यहां तक कि जब यह मानते हुए कि ऑपरेशन ऊपर सूचीबद्ध लोगों के अलावा कोई अन्य रूपांतरण नहीं करता है), तो इस तरह के एक महंगे ऑपरेशन को करने का कोई मतलब नहीं होगा।