Cómo? Parámetros y COMO sentencia SQL


Estoy escribiendo una función de búsqueda, y he pensado en esta consulta utilizando parámetros para prevenir, o al menos limitar, los ataques de inyección SQL. Sin embargo, cuando lo corro a través de mi programa no devuelve nada:

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')

¿Se pueden usar parámetros así? o solo son válidas en un caso 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, ¿eso tiene impacto en la sintaxis que ustedes tienen ¿contribuiste?

Además, ejecuté esta instrucción en SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE%max%')` y eso devuelve resultados.

Author: Anders, 2008-10-30

6 answers

Su código de visual basic se vería algo como esto:

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")

cmd.Parameters.Add("@query", searchString)
 73
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-30 18:54:17

Bueno, yo diría:

 Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

 cmd.Parameters.Add("@query", "%" +searchString +"%")
 103
Author: James Curran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-30 19:15:33

Tienes que hacer:

LIKE '%' + @param + '%'

 23
Author: Andrew Bullock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-10 01:42:59

Es posible que tenga que concatenar los signos % con su parámetro, por ejemplo:

COMO ' % ' / / @query / / '% '

Editar: En realidad, eso puede no tener ningún sentido en absoluto. Creo que he malinterpretado tu problema.

 1
Author: Will Wagner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-30 18:58:57

A veces el símbolo utilizado como marcador de posición % no es el mismo si ejecuta una consulta desde VB que cuando la ejecuta desde MS SQL / Access. Intente cambiar su símbolo de marcador de posición de % a *. Eso podría funcionar.
Sin embargo, si depura y desea copiar su cadena SQL directamente en MS SQL o Access para probarlo, es posible que tenga que cambiar el símbolo a % en MS SQL o Access para devolver valores.

Espero que esto ayude

 1
Author: Lalie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-04 22:33:12

Intente también de esta manera

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE CONCAT('%',@query,'%')  OR  title LIKE CONCAT('%',@query,'%') )")
cmd.Parameters.Add("@query", searchString)
cmd.ExecuteNonQuery()

Utilizados Concat en lugar de +

 0
Author: Ramgy Borja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-02 01:31:01