2008-11-06 9 views
13

Böyle bir şey yapmak istiyorum:Delphi 7'de, Biçim işlevindeki yüzde işaretinden (%) nasıl çıkabilirim?

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

Ama Biçim elbette, bunun son '%' sevmez. Peki nasıl kaçabilirim? \%? %%?

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

:

Veya bunu yapmak gerekiyor?

+2

Not verir senin SearchTerm (örneğin bir QuotedStr() çağrısı ile). –

cevap

26

biçim dizesinde başka% kullanın: Zorunlu

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

: http://xkcd.com/327/ :-)

bağlamına bağlı olarak yaklaşımınız SQL Injection saldırılarından etkilendiğini olabilir. Arama terimi kullanıcı girdisinden geliyorsa, parametreli bir sorgu kullanmak veya en azından girişi dezenfekte etmeye çalışmak daha iyi olacaktır.

+0

Doğru, savunmasız olurdu ... ama bu bir POC için atılmış durumda. Gerçekten de LIKE ile parametreli sorguları nasıl kullanacağımı anlayamadım. – Blorgbeard

+1

+ 1 Parametreler daha güvenli ve biraz daha hızlı olacaktır (DB motorunuza bağlı olarak ve hazırlanmış bir deyimi yeniden kullanırsanız). String değerini bir parametre ile değiştirirsiniz ve LIKE ifadesine dokunmazsınız. Yani 'SQL.Text: =' gibi foo'yu seçin, baz gibi: TERM 've 'ParamByName (' TERM '). AsText: = SearchTerm +'% ''. Tırnak ve% chars ile daha fazla sorun yok. –

+0

Benim favorimden biri, sadece bu comic için +1 ;-) –

0

olması 2 yüzde işareti ekleyin 1 tek%
Örnek:

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

size daha iyi sorgusu için parametreler kullanmak, ya da en azından tırnak içinde işlemesi gereken

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