Estoy escribiendo una función de búsqueda, y he pensado en esta consulta utilizando parámetros para evitar, o al menos limitar, ataques de inyección SQL. Sin embargo, cuando lo ejecuto a través de mi programa no devuelve nada:¿Cómo? Parámetros y declaración LIKE SQL
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Puede parámetros usarse como este? o solo son válidos en una instancia como:
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'
(donde <string>
es el objeto de búsqueda).
EDITAR: Estoy construyendo esta función con VB.NET, ¿tiene eso un impacto en la sintaxis que ustedes han contribuido?
Además, ejecuté esta declaración en SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE
% max% ') `y eso devuelve resultados.
Como Adam ha señalado en su respuesta, esto no protege contra la inyección de SQL. La consulta debe estar parametrizada. – DOK
¿Podría proporcionar un ejemplo donde esto no impida la inyección de SQL? De mi prueba funciona bien – John
No está abierto a la inyección de 'SQL', solo inyección' LIKE'. Esto significa que el usuario puede ingresar caracteres especiales como '%' '^' y '_' que' LIKE' interpretará especialmente. Esto significa que el usuario puede no obtener lo que espera para ciertas búsquedas. Como ejemplo, una búsqueda de '' menos de 1% de grasa '' puede devolver el resultado '' menos del 1% de los médicos recomiendan esto: ¡está lleno de grasa! ''. –