Estoy escribiendo una función de búsqueda y he pensado en esta consulta utilizando parámetros para prevenir, o al menos limitar, ataques de inyección SQL. Sin embargo, cuando lo ejecuto a través de mi programa, no devuelve nada:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
¿Se pueden usar los parámetros de esta manera? o solo son válidos en una instancia como:
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'(donde <string>está el objeto de búsqueda).
EDITAR: Estoy construyendo esta función con VB.NET, ¿eso tiene 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.

SQLinyecciones, soloLIKEinyecciones. Esto significa que el usuario puede ingresar caracteres especiales como%^y_queLIKEinterpretará especialmente. Esto significa que es posible que el usuario no obtenga lo que espera de determinadas búsquedas. Por ejemplo, una búsqueda de'less than 1% fat'puede devolver el resultado'less than 1% of doctors recommend this - it's full of fat!'.searchString.Replace("[","[[]").Replace("%","[%]").Replace("_","[_]"), lo que permitirá la inyección LIKE (siempre que no esté usando la cláusula de escape).Bueno, iría con:
Dim cmd as New SqlCommand( "SELECT * FROM compliance_corner"_ + " WHERE (body LIKE @query )"_ + " OR (title LIKE @query)") cmd.Parameters.Add("@query", "%" +searchString +"%")fuente
cmd.Parameters.AddconviertecmdLoad.Parameters.AddWithValueo hay algún problema? Entiendo que la respuesta de James es de 2008 :)tu tienes que hacer:
LIKE '%' + @param + '%'fuente
Puede 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 entendido mal tu problema.
fuente
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*. Aquello podría funcionar.Sin embargo, si depura y desea copiar su cadena SQL directamente en MS SQL o Access para probarla, es posible que deba volver a cambiar el símbolo a
%MS SQL o Access para devolver valores.Espero que esto ayude
fuente
prueba 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()Usó Concat en lugar de +
fuente