【问题标题】:sql delete statements with multiple where condition error带有多个where条件错误的sql删除语句
【发布时间】:2019-09-09 17:40:59
【问题描述】:

这是正确的说法,如果不是请帮助我纠正它。

String query = "delete from favourite where username=" + 
               Session["username"].ToString() + "and id=" + id;

【问题讨论】:

标签: c# sql sql-delete sqlanywhere


【解决方案1】:

如果您的问题纯粹是关于 SQL,那么是的,您所拥有的将起作用。但是,正如您所拥有的那样,您有一个非常严重的安全问题。谷歌“SQL 注入攻击”。我不确定您使用什么进行数据访问(ADO.NET?Entiry Framework?Dapper?)但无论如何,您都需要使用参数:

var sql = "delete from favourite where username=@username and id=@id";

然后:

cmd.Parameters.AddWithValue("@username", Session["username"].ToString());
cmd.Parameters.AddWithValue("@id", id);

但即便如此,AddWithValue 也不是最好的方法,因为一旦查询到达数据库,它就会导致类型转换问题。你最好直接写:

var userNameParam = new SqlParameter("username", SqlDbType.VarChar);
userNameParam.Value = Session["username"].ToString();

var idParam = new SqlParameter("id", SqlDbType.Int);
idParam .Value = id;

command.Parameters.Add(salaryParam);
command.Parameters.Add(idParam );

【讨论】:

  • 谢谢您,先生!它在使用 Parameters.AddWithValue() 方法后工作。
  • 如果输入不是直接来自用户,或者输入来自控制值的下拉列表之类的东西,则无需担心 SQL 注入攻击。
  • @DominicIsaia,我不同意。下拉列表中的项目很容易被欺骗。即使输入不是“直接”来自用户,也几乎是间接来自用户的方式,并且注入攻击输入仍然是可能的。
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 2014-08-17
  • 2017-12-22
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多