web-dev-qa-db-ja.com

方法?パラメーターとLIKEステートメントSQL

私は検索機能を作成していますが、SQLインジェクション攻撃を防ぐため、または少なくとも制限するためにパラメーターを使用してこのクエリを考えました。ただし、プログラムで実行しても何も返されません。

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

パラメータはこのように使用できますか?または、次のようなインスタンスでのみ有効ですか?

_SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'_(ここで_<string>_は検索オブジェクトです)。

編集:私はVB.NETでこの関数を構築していますが、それは皆さんが貢献した構文に影響を与えますか?

また、SQL Serverで次のステートメントを実行しました:SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE%max% ') `そして、それは結果を返します。

76
Anders

視覚的な基本コードは次のようになります。

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

cmd.Parameters.Add("@query", searchString)
76
John

まあ、私は一緒に行きます:

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

 cmd.Parameters.Add("@query", "%" +searchString +"%")
108
James Curran

あなたはしなければならない:

LIKE '%' + @param + '%'

25
Andrew Bullock

パラメーターと%記号を連結する必要がある場合があります。例:

LIKE '%' || @query || 「%」

編集:実際、それはまったく意味をなさないかもしれません。私はあなたの問題を誤解したかもしれないと思います。

1
Will Wagner

この方法も試してください

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()

+の代わりにConcatを使用

0
Ramgy Borja