मेरे पास कुछ कोड है जो इंजेक्शन के खिलाफ रोकने के लिए पैरामीटरयुक्त प्रश्नों का उपयोग करता है, लेकिन मुझे तालिका की संरचना के बावजूद क्वेरी को गतिशील रूप से बनाने में सक्षम होना चाहिए। ऐसा करने का सही तरीका क्या है?पैरामीटरेटेड एसक्यूएल कॉलम?
यहां एक उदाहरण है, कहें कि मेरे पास कॉलम नाम, पता, टेलीफोन के साथ एक टेबल है। मेरे पास एक वेब पेज है जहां मैं चलाता हूं कॉलम दिखाएं और विकल्पों के साथ उनके साथ एक ड्रॉप-डाउन को पॉप्युलेट करें।
अगला, मेरे पास खोज नामक एक टेक्स्टबॉक्स है। यह टेक्स्टबॉक्स पैरामीटर के रूप में प्रयोग किया जाता है।
वर्तमान में मेरे कोड इस तरह दिखता है:
result = pquery('SELECT * FROM contacts WHERE `' + escape(column) + '`=?', search);
मैं हालांकि यह से एक को भावुक महसूस कर रही हो। पैरामीटरयुक्त प्रश्नों का उपयोग करने का कारण से बचने के लिए से बचने के लिए है। इसके अलावा, भागने संभवतः कॉलम नाम से बचने के लिए डिज़ाइन नहीं किया गया है।
मैं कैसे सुनिश्चित कर सकता हूं कि यह मेरा इरादा है?
संपादित करें: कारण मैं गतिशील प्रश्नों की आवश्यकता है कि स्कीमा उपयोगकर्ता के विन्यास योग्य है है, और मैं चारों ओर कुछ भी हार्ड-कोडेड ठीक करने के लिए नहीं किया जाएगा।
हार्ड कोडिंग मेरे लिए एक विकल्प नहीं है, सुझाव के लिए धन्यवाद! – Martin
मेरा बिंदु स्तंभ नामों को हार्डकोड नहीं करना है, लेकिन उन्हें इंटरफ़ेस से पास नहीं करना है। आप गतिशील रूप से कॉलम की सूची प्राप्त कर सकते हैं, और अभी भी ऊपर दिए गए एक ही समाधान का उपयोग कर सकते हैं। बस पास किए गए डेटा का कॉलम नाम भाग न बनाएं - जो आपको किसी भी SQL इंजेक्शन से सुरक्षित रखेगा। – zigdon
+1 हां, मुझे यह कहना पसंद है: उपयोगकर्ताओं को डेटा दर्ज करने दें, लेकिन उपयोगकर्ताओं को कोड प्रदान करने दें। –