2017-02-22 71 views
0

以下代碼傳遞此行。最後一列名爲toscode。我試圖清除toscolumn包含名稱中任何位置的「W1」的行。沒有列被設置爲索引。不起作用。SQL語句不過濾行

我看到W1前面的$(escape)是爲了防止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」後,你應該使用'LIKE' ,而不是'不喜歡'。 – shmosel

+0

@RiggsFolly *我試圖** **除了'toscolumn'不包含名稱中任何地方的「W1」的行* – shmosel

+0

@RiggsFolly如果「清除」意味着「排除」,則不行。 – shmosel

回答

2

LIKE條款應該是:

toscode NOT LIKE '%W1%' 

刪除 '$' - 它屬於犯規,或在一個LIKE條款任何意義。你只需要擔心SQL注入是否是用戶提供的輸入,在你的例子中不是這種情況。

的「%」字符是一個通配符,所以如果你想選擇僅包含「W1」行什麼事情都可能是之前或搜索

+0

這有效,但「逃避防止SQL注入」呢?不是我關心那麼多... – Ivan

+0

即使 [如果你逃避投入,它不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real -escape-string) 使用[prepared parameterized statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

啊,我看到你編輯過的帖子。謝謝。 – Ivan