0

我有这段代码,我想防止 SQL 注入...

MySqlCommand command = new MySqlCommand("Update Cliente set blacklist='true' WHERE ID ='" + txtid.Text +"'", mConn);
command.ExecuteNonQuery();

我试图这样做:

            MySqlCommand command = new MySqlCommand("Update Cliente set blacklist=@bl WHERE ID ='" + "@id" + "'", mConn);
            command.Parameters.AddWithValue("@id", txtid.Text);
            command.Parameters.AddWithValue("@bl", 1);
            command.ExecuteNonQuery();

黑名单是 bool 所以 1 = true。它没有给出任何错误,但它不起作用,它应该像这样工作:

我有一个带有字段的表单,我输入了一个存在于 Cliente 表中的 ID,单击按钮,它会将黑名单字段更新为“true”,其中 ID 与我在文本框中键入的 ID 相同。

4

2 回答 2

2

改变这个:

MySqlCommand command = 
  new MySqlCommand("Update Cliente set blacklist=@bl WHERE ID ='" + "@id" + "'", 
                   mConn);

对此:

MySqlCommand command = 
  new MySqlCommand("Update Cliente set blacklist=@bl WHERE ID =@id", 
                   mConn);

您不需要在 SQL 代码中引用参数,使用参数的重点是让 DB 引擎处理数据替换。

于 2013-05-17T14:47:26.027 回答
0

第二个参数不起作用,因为你用单引号括起来。删除参数周围的单引号,它将起作用。请记住,参数是标识符而不是字符串文字。

UPDATE Cliente SET blacklist = @bl WHERE ID = @id
于 2013-05-17T14:47:56.230 回答