2008-11-06 21 views
13

quiero hacer algo como esto:En Delphi 7, ¿cómo puedo evitar un signo de porcentaje (%) en la función de Formato?

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

Pero Formato no le gusta que la última '%', por supuesto. Entonces, ¿cómo puedo escapar? \%? %%?

O tengo que hacer esto:

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

?

+2

en cuenta que debe utilizar mejor los parámetros para su búsqueda, o al menos manejar cotizaciones dentro de su SearchTerm (por ejemplo, a través de una llamada a QuotedStr()). –

Respuesta

26

% Utilice otro en la cadena de formato:

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

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

Dependiendo del contexto, el enfoque podría ser vulnerable a la inyección de SQL. Si el término de búsqueda proviene de la entrada del usuario, probablemente sería mejor usar una consulta parametrizada o al menos tratar de desinfectar la entrada.

+0

Cierto, sería vulnerable ... pero esto es para un POC desechable. Realmente no he descubierto cómo usar consultas parametrizadas con LIKE. – Blorgbeard

+1

+1 Los parámetros serán más seguros y algo más rápidos (dependiendo de su motor de base de datos, y si vuelve a utilizar una declaración preparada). Reemplace el valor de cadena por un parámetro y no tocará la expresión LIKE. Así que puedes escribir 'SQL.Text: = 'seleccionar foo desde la barra donde baz like: TERM'' y' ParamByName (' TERM '). AsText: = SearchTerm +'% ''. No más problemas con las cotizaciones y% chars. –

+0

Uno de mis favoritos, +1 solo para ese comic ;-) –

0

Añadir un 2 por ciento signo tener 1 sola%
Ejemplo:

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

Le da

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