2017-02-22 3 views
0

次のコードはこの行を渡します。最後の列の名前はtoscodeです。私はtoscolumnに名前のどこにでも "W1"が含まれている行を除外しようとしています。索引として列は設定されていません。動作しません。行をフィルタリングしないSQL文

W1の前にある$(エスケープ)は、SQLインジェクションを防ぐためのものです。 %が何をしているのかはっきりしていませんが、インデックスと関係している可能性があります。

| SPX | 0 | 8.3 | 8.7 | 2017-03-24 |    0 | 30 | PUT | 2400 | SPXW170324C02400000 | .SPXW1703242400 | 

MySqlCommand cmd = conn.CreateCommand(); 
cmd.Parameters.AddWithValue("@symbol", symbol); 
cmd.CommandText = @"select * 
        from contractdetails 
        where symbol = @symbol 
         && toscode NOT LIKE '%$W1%' 
         && Type = 'PUT' 
         && oBid > .09 
         && not ITM 
         && Days > 10 
         && Days < 120 
        order by Days asc"; 
+0

の「W1」の前か後かもしれません「そうでない」ではありません。 – shmosel

+0

@RiggsFolly * 'toscolumn'に名前のどこにでも「W1」が含まれていない行を除外しようとしています。* – shmosel

+0

@RiggsFolly「除外」が「除外」を意味するわけではありません。 – shmosel

答えて

2

あなたLIKE句は次のようになります。

toscode NOT LIKE '%W1%' 

は削除 '$' -it doesntの所属や LIKE句の意味を持っています。あなたの例ではそうではありませんが、ユーザが入力したものであれば、SQLインジェクションについて心配する必要があります。

「%」文字がワイルドカードなので、何でもあなたが「W1」を含む行のみを選択しようとしている場合、あなたは `LIKE`を使用する必要があり、検索

+0

それは動作しますが、「SQLインジェクションを防ぐためにエスケープする」はどうでしょうか?それほど心配していません... – Ivan

+0

でも [あなたが入力をエスケープしている場合は、その安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real -escape-string) [準備されたパラメータ化された文]を使用してください(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

ああ、編集した投稿があります。ありがとう。 – Ivan