我有这段代码,我想阻止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相同文本框。
答案 0 :(得分: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代码中引用参数,使用参数的整点是让数据库引擎处理数据替换。
答案 1 :(得分:0)
第二个参数不起作用,因为您用单引号将其包装起来。删除参数周围的单引号,它将起作用。请记住,参数是标识符,而不是字符串文字。
UPDATE Cliente SET blacklist = @bl WHERE ID = @id