2008-11-06 14 views
13

मैं इस तरह कुछ करना चाहता हूँ:डेल्फी 7 में, मैं प्रारूप फ़ंक्शन में प्रतिशत चिह्न (%) से कैसे बचूं?

SQL.Text := Format('select foo from bar where baz like ''%s%''',[SearchTerm]); 

लेकिन स्वरूप, कि पिछले '%' पसंद नहीं है निश्चित रूप से। तो मैं इसे कैसे बच सकता हूं? \%? %%?

SQL.Text := Format('select foo from bar where baz like ''%s''',[SearchTerm+'%']); 

:

या मैं यह करने के लिए है?

+2

ध्यान दें कि आप बेहतर आपकी क्वेरी के लिए मानकों का उपयोग करना चाहिए, या कम से कम उद्धरण के भीतर संभाल अपने SearchTerm (उदाहरण के लिए एक QuotedStr() कॉल के माध्यम से)। –

उत्तर

26

प्रारूप स्ट्रिंग में एक और% का उपयोग करें:

SQL.Text := Format('select foo from bar where baz like ''%s%%''',[SearchTerm]); 
5

अनिवार्य: http://xkcd.com/327/ :-)

संदर्भ के आधार पर आपका दृष्टिकोण एसक्यूएल इंजेक्शन के लिए असुरक्षित हो सकता है। यदि खोज शब्द उपयोगकर्ता इनपुट से आता है तो यह पैरामीटरयुक्त क्वेरी का उपयोग करना बेहतर होगा या कम से कम इनपुट को स्वच्छ करने का प्रयास करें।

+0

सच है, यह कमजोर होगा .. लेकिन यह एक फेंकने वाले पीओसी के लिए है। मैंने वास्तव में यह नहीं पाया है कि LIKE के साथ पैरामीटरयुक्त प्रश्नों का उपयोग कैसे करें। – Blorgbeard

+1

+1 पैरामीटर्स अधिक सुरक्षित होंगे, और कुछ हद तक तेज़ होंगे (आपके डीबी इंजन के आधार पर, और यदि आप एक तैयार कथन का पुनः उपयोग करते हैं)। आप स्ट्रिंग मान को पैरामीटर द्वारा प्रतिस्थापित करते हैं, और LIKE अभिव्यक्ति को स्पर्श नहीं करेंगे। तो आप 'SQL.Text: =' लिख सकते हैं बार से foo चुनें जहां baz like: TERM'' 'ParamByName (' TERM ')। AsText: = SearchTerm +'% ''। उद्धरण और% वर्णों के साथ कोई और समस्या नहीं है। –

+0

मेरे पसंदीदा में से एक, केवल उस कॉमिक के लिए +1 ;-) –

0

है में जोड़े 2 प्रतिशत चिह्न 1 सिंगल%
उदाहरण:

Format('select foo from bar where baz like ''%%%s%%'',[SearchString]) 

आप देता है

select foo from bar where baz like '%SearchString%'