2017-02-22 69 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