2011-06-01 14 views
5

मैं वर्तमान में MySQL का उपयोग करता हूं, लेकिन भविष्य में सबूत बनाने के लिए ओडीबीसी समाधान पसंद करूंगा।ओडीबीसी डेटाबेस इनपुट को कैसे व्यवस्थित करें?

मैं इसे कैसे एक ODBC डेटाबेस के लिए पार करने से पहले उपयोगकर्ता इनपुट स्वच्छ करते हैं?

और, जब मैं उस पर हूँ, मैं डबल कोट, उदा में मेरी स्ट्रिंग लपेटो "मूल्यों में विवरण (विवरण)" "- लेकिन क्या होगा यदि पाठ में दोहरा उद्धरण शामिल है?

+1

आप उपयोगकर्ता इनपुट किस तरह का क्या मतलब है? उदाहरण के लिए, यदि उपयोगकर्ता आपको चलाने के लिए प्रश्न देता है तो आपको अपने सामने बहुत काम मिल गया है। जैसा कि आपने उल्लेख किया है, विशेष पात्रों से बचने के अलावा, आपको SQL इंजेक्शन जैसे सुरक्षा समस्याओं के लिए भी देखना होगा, और आप शायद स्वीकार्य बयानों के सेट को सीमित करना भी चाहेंगे (उदाहरण के लिए, नहीं डीडीएल को अनुमति दें।) दूसरी तरफ, यदि उपयोगकर्ता आपको डेटा देता है और आपका एप्लिकेशन डेटाबेस को डेटा लिखने के लिए ओडीबीसी का उपयोग करता है, तो आपको कुछ भी करने की ज़रूरत नहीं है क्योंकि डेटा और आपके एसक्यूएल स्टेटमेंट मिश्रण नहीं करते हैं। की –

+1

संभव डुप्लिकेट [डेल्फी - एसक्यूएल इंजेक्शन के खिलाफ रोकने] (http://stackoverflow.com/questions/6000648/delphi-prevent-against-sql-injection) – Johan

+0

ODBC ** ** यह भविष्य सबूत नहीं होगा, यह इसे धीमा कर दें, विकल्पों को पट्टी करें और इसे छोटी गाड़ी बनाएं। विकल्पों में से कोई भी संख्या, जेईओएस लगभग 10 डेटाबेस से कनेक्ट हो सकती है, इसलिए एडीओ भी कर सकती है। – Johan

उत्तर

8

एक parametrized एसक्यूएल वाक्य

इस तरह का उपयोग करें।

INSERT INTO MyTable (Field1,Field2) VALUES (:Param1,:Param2) 

जांच कैसे उपयोग पैरामीटर Using Parameters in Queries.

+0

+1 मैं http://docwiki.embarcadero.com/CodeExamples/en/ADOQuery_%28Delphi%29 से उदाहरण का पालन करने का प्रयास कर रहा हूं लेकिन मुझे '_latin1' के बारे में अपवाद मिलता है, मैं उस पर सहायता मांगने के लिए एक और प्रश्न पोस्ट करूंगा। – Mawg

3

यदि आप डेल्फी से आरएमआई के माध्यम से संभवतः hibernate का उपयोग कर सकते हैं। हालांकि यह जावा केंद्रित है, लेकिन यह लगभग पूरी तरह से प्रोग्रामर को इन्सुलेट करता है अंतर्निहित डीबी, और आपके द्वारा उल्लेखित मुद्दों को पूरा करता है और बहुत कुछ करता है।

बीटीडब्ल्यू, अपने प्रश्न दोहरे उद्धरणों का उत्तर देने के लिए, दोहरे उद्धरण वाले मूल्य को बचाने के लिए, उन्हें दोहरे उद्धरण के रूप में दोहराएं, उदाहरण के लिए

This is "my" text 

के रूप में सहेजा जाएगा 0
"This is ""my"" text" 
+0

-1, पहले ओडीबीसी, हाइबरनेट से, आप कितने स्तर के संकेत चाहते हैं, बस पैरा और देशी कोड का उपयोग करें। – Johan

3

के बारे में अधिक जानकारी के लिए Embarcadero से इस लेख आप एक बार देख ले सकते हैं भी यहाँ Delphi - prevent against SQL injection, वहाँ कुछ संकेत/उदाहरण हैं।

8
  1. ओडीबीसी MySQL के साथ काम करने का एक इष्टतम तरीका नहीं है। भले ही आपको भविष्य में कुछ डीबीएमएस का समर्थन करने की आवश्यकता हो, फिर भी आप बहु-डीबीएमएस डेटा एक्सेस लाइब्रेरीज़ पर विचार कर सकते हैं, जिसमें डीबीईएक्सप्रेस (डेल्फी के साथ आता है) और 3 डी पार्टी - AnyDAC (वाणिज्यिक), ज़ीसलिब (फ्रीवेयर) इत्यादि
  2. यदि यदि आप एक MySQL क्वेरी में एक स्ट्रिंग निरंतर विकल्प है, तो आप esacape the special characters करने की जरूरत है या hexadecimal representation में स्ट्रिंग परिवर्तित की जरूरत है। यह आपको संभव एसक्यूएल इंजेक्शन और वाक्यविन्यास त्रुटियों से बचाता है। लेकिन आपकी क्वेरी तैयारी को और जटिल बना देता है।
  3. सबसे अच्छा तरीका है - उपयोग मापदंडों और पैरामीटर मान भी शाब्दिक सबमिट करें। यह सरल और सुरक्षित है।
संबंधित मुद्दे