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.
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)
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 +"%")
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 + '%'
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.
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
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 +
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