2008-11-06 3 views
13

Я хочу сделать что-то вроде этого:В Delphi 7, как мне избежать знака процента (%) в функции Format?

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()). – 2012-09-06 09:29:35

ответ

26

Используйте другой% в строке формата:

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

Обязательно: http://xkcd.com/327/ :-)

В зависимости от контекста, ваш подход может быть уязвим для SQL инъекций. Если поисковый запрос исходит от пользовательского ввода, вероятно, было бы лучше использовать параметризованный запрос или, по крайней мере, попытаться дезинформировать ввод.

+0

Правда, это было бы уязвимым .. но это для разового POC. Я на самом деле не понял, как использовать параметризованные запросы с LIKE. – Blorgbeard 2008-11-06 19:52:02

0

Добавить 2 знак процента имеют 1 сингл%
Пример:

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

Дает

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