2008-11-06 7 views
13

Ich mag so etwas wie dies zu tun:Wie entkomme ich in Delphi 7 ein Prozentzeichen (%) in der Funktion Format?

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

Aber Format nicht wie das letzte ‚%‘, natürlich. Wie kann ich dem entkommen? \%? %%?

Oder muss ich dies tun:

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

?

+2

Beachten Sie, dass Sie bessere Parameter für Ihre Anfrage, oder zumindest umgehen Anführungszeichen verwenden sollten in Ihrem SearchTerm (zB über einen QuotedStr() -Aufruf). –

Antwort

26

eine andere% im Formatstring verwenden:

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

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

Je nach Kontext, könnte Ihr Ansatz für SQL-Injection anfällig sein. Wenn der Suchbegriff von Benutzereingaben kommt, wäre es wahrscheinlich besser, eine parametrisierte Abfrage zu verwenden oder zumindest zu versuchen, die Eingabe zu bereinigen.

+0

Wahr, es wäre verwundbar .. aber das ist für einen Wegwerf-POC. Ich habe nicht herausgefunden, wie man parametrisierte Abfragen mit LIKE verwendet. – Blorgbeard

+1

+1 Parameter sind sicherer und etwas schneller (abhängig von Ihrer DB-Engine und wenn Sie eine vorbereitete Anweisung erneut verwenden). Sie ersetzen den Zeichenfolgenwert durch einen Parameter und berühren nicht den LIKE-Ausdruck. So können Sie 'SQL.Text: = 'foo aus der Bar schreiben, wobei baz wie folgt ist: TERM'' und' ParamByName (' TERM '). AsText: = SearchTerm +'% '. Kein Problem mehr mit Anführungszeichen und% -Zeichen. –

+0

Einer meiner Favoriten, +1 nur für diesen Comic ;-) –

0

hinzufügen 2 Prozentzeichen haben 1 Einzel%
Beispiel:

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

Gibt Ihnen

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