私は検索機能を作成していますが、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% ') `そして、それは結果を返します。
視覚的な基本コードは次のようになります。
Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")
cmd.Parameters.Add("@query", searchString)
まあ、私は一緒に行きます:
Dim cmd as New SqlCommand(
"SELECT * FROM compliance_corner"_
+ " WHERE (body LIKE @query )"_
+ " OR (title LIKE @query)")
cmd.Parameters.Add("@query", "%" +searchString +"%")
あなたはしなければならない:
LIKE '%' + @param + '%'
パラメーターと%記号を連結する必要がある場合があります。例:
LIKE '%' || @query || 「%」
編集:実際、それはまったく意味をなさないかもしれません。私はあなたの問題を誤解したかもしれないと思います。
この方法も試してください
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を使用