अंतर नगण्य माना जाता है।
फिर भी, किसी को मूल रूप से तैयार किए गए कथनों में अंतर करना होगा तैयार बयान के सामान्य विचार से।
पूर्व, अधिकांश डीबीएमएस द्वारा समर्थित चलने वाली क्वेरी का एक रूप है, जिसे यहां
समझाया गया है। . इसके उपयोग पर सवाल उठाया जा सकता है।
बाद वाला एक प्लेसहोल्डर के साथ वास्तविक डेटा को प्रतिस्थापित करने का एक सामान्य विचार है, जिसका अर्थ है प्रतिस्थापित डेटा की आगे की प्रक्रिया। यह प्रोग्रामिंग में व्यापक रूप से उपयोग किया जाता है, एक प्रसिद्ध printf()
समारोह एक उदाहरण है। और इस बाद के दृष्टिकोण का उपयोग हमेशा किसी डेटाबेस के विरुद्ध क्वेरी चलाने के लिए किया जाना चाहिए , कोई फर्क नहीं पड़ता कि यह देशी तैयार बयानों द्वारा समर्थित है या नहीं। क्योंकि:
- तैयार विवरण उचित स्वरूपण (या हैंडलिंग) अपरिहार्य बनाता है ।
- तैयार किया गया विवरण उचित स्वरूपण (या हैंडलिंग) करता है केवल उचित स्थान पर - क्वेरी निष्पादन से ठीक पहले, कहीं और नहीं, इसलिए, हमारी सुरक्षा ऐसे अविश्वसनीय स्रोतों पर निर्भर नहीं होगी जैसे
- कुछ PHP 'मैजिक' फीचर जो डेटा को सुरक्षित बनाने के बजाय खराब कर देता है।
- एक (या कई) प्रोग्रामर की अच्छी इच्छा, जो प्रोग्राम प्रवाह में कहीं हमारे चर को प्रारूपित (या प्रारूपित नहीं) करने का निर्णय ले सकते हैं। यह बहुत महत्वपूर्ण बात है।
- तैयार विवरण क्वेरी में जाने वाले मूल्य को प्रभावित करता है, लेकिन स्रोत चर को नहीं, जो बरकरार रहता है और आगे के कोड में उपयोग किया जा सकता है (ईमेल के माध्यम से भेजा जा सकता है या स्क्रीन पर दिखाया जा सकता है)।
- तैयार किया गया स्टेटमेंट, एप्लिकेशन कोड को नाटकीय रूप से छोटा बना सकता है, परदे के पीछे सभी फ़ॉर्मेटिंग कर सकता है (*केवल अगर ड्राइवर अनुमति देता है)।
इसलिए, भले ही आप मूल रूप से तैयार किए गए कथनों का उपयोग न करने पर विचार करें (जो बिल्कुल ठीक है), आपको वास्तविक डेटा के बजाय प्लेसहोल्डर का उपयोग करके हमेशा अपने प्रश्न बनाने होंगे। इस उद्देश्य के लिए आप PDO का उपयोग कर सकते हैं , जो ठीक ऊपर बताए अनुसार काम करता है - डिफ़ॉल्ट रूप से यह केवल तैयारी का अनुकरण करता है , का अर्थ है नियमित SQL क्वेरी को तैयार क्वेरी और डेटा से बनाया जा रहा है, और फिर डेटाबेस के विरुद्ध चलाया जा रहा है।
हालांकि, पीडीओ में कई महत्वपूर्ण डेटा प्रकारों, जैसे पहचानकर्ता या सरणी के लिए समर्थन की कमी है - इस प्रकार यह आपको हमेशा प्लेसहोल्डर का उपयोग करने में असमर्थ बनाता है और इस प्रकार इंजेक्शन को काफी संभव बनाता है। सौभाग्य से, safeMysql प्रत्येक डेटा प्रकार के लिए प्लेसहोल्डर हैं और आपको सुरक्षित रूप से क्वेरी चलाने की अनुमति देता है।