2008-11-06 5 views
13

Je veux faire quelque chose comme ceci:Dans Delphi 7, comment j'échappe un signe de pourcentage (%) dans la fonction Format?

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

Mais Format n'aime pas cette dernière « % », bien sûr. Alors, comment puis-je y échapper? \%? %%?

Ou dois-je faire:

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

?

+2

Notez que vous devez mieux utiliser les paramètres de votre requête, ou du moins gérer les devis de votre SearchTerm (par exemple via un appel QuotedStr()). –

Répondre

26

Utilisez un autre% dans la chaîne de format:

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

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

Selon le contexte, votre approche pourrait être vulnérable à l'injection SQL. Si le terme de recherche provient de l'entrée de l'utilisateur, il serait probablement préférable d'utiliser une requête paramétrée ou du moins d'essayer de désinfecter l'entrée.

+0

Vrai, ce serait vulnérable ... mais c'est pour un POC jetable. Je n'ai pas vraiment compris comment utiliser les requêtes paramétrées avec LIKE. – Blorgbeard

+1

+1 Les paramètres seront plus sûrs et plus rapides (selon votre moteur de base de données, et si vous réutilisez une instruction préparée). Vous remplacez la valeur de chaîne par un paramètre et ne touchez pas l'expression LIKE. Vous pouvez donc écrire 'SQL.Text: = 'sélectionnez foo à partir de la barre où baz comme: TERM'' et' ParamByName (' TERM ') .AsText: = SearchTerm +'% ''. Plus de problème avec les guillemets et% caractères. –

+0

Un de mes préférés, +1 pour cette bande dessinée seulement ;-) –

0

Ajouter 2 pour cent signe d'avoir 1 seul%
Exemple:

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

Vous donne

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