यहां विषय पर मेरा उच्च स्तरीय दृश्य है।
गतिशील एसक्यूएल तारों का उपयोग करते समय, आप ठीक से काम कर रहे एस्केपिंग फ़ंक्शन पर निर्भर हैं। दुर्भाग्य से, यह हमेशा मामला है, के रूप में यह (वैसे पुराने) उदाहरण में देखा जा सकता है:
http://dev.mysql.com/doc/refman/5.0/en/news-5-0-22.html
एक बार आपके डेटा मानों भाग निकले कर दिया है, एसक्यूएल स्ट्रिंग पार्स किया जा सकता है और डेटाबेस द्वारा संकलित सर्वर। यदि भागने वाले फ़ंक्शन ने अपना काम सही तरीके से नहीं किया है, या एक चालाक नया एसक्यूएल इंजेक्शन हमला खोजा गया है, तो एक मौका है कि सर्वर SQL कथन के लिए डेटा गलती करेगा।
यदि आप पैरामीटर के साथ तैयार कथन का उपयोग करते हैं, तो कथन पहले पार्स और संकलित किया जाता है। जब डेटा निष्पादित किया जाता है तो डेटा मान संकलित कथन के साथ संयुक्त होते हैं। यह SQL तर्क को डेटा मानों से अलग करता है - दो को भ्रमित करने का अवसर कभी नहीं होना चाहिए।
तो, हाँ, आप mysqli_real_escape_string
के साथ बांट सकते हैं, लेकिन मैं अब तक नहीं कहूंगा कि पैरामीटर के साथ तैयार बयान का उपयोग एसक्यूएल इंजेक्शन असंभव बनाता है। यह इसे काफी कठिन बनाता है, लेकिन mysqli_real_escape_string
बग के साथ, मुझे लगता है कि अभी तक ऐसा मौका है कि अभी तक खोजा जा सकता है (या नव निर्मित) बग असंभव, असंभव बना देगा।
हाँ, अधिक जानकारी के लिए http://www.sjmp.de/php/php-mysql-mehr-sicherheit-und-erhoehte-performance-durch-mysqli-und-prepared-statements/ देखना – Tobias