繁体   English   中英

MySql Where 子句参数

[英]MySql Where Clause Parameter

MySqlCommand command = new MySqlCommand("
    select * 
    from singlecustomer 
    where name like concat ('%',@search,'%') 
        or code like concat ('%',@search,'%') 
        or id like concat ('%',@search,'%')", con);

command.Parameters.Add(new MySqlParameter("@search", "%"+sc.sc_SearchBox.Text+"%"));

MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = command;
DataTable dt = new DataTable();
adapter.Fill(dt);
sc.dgClientLog.DataSource = dt;

这是验证搜索是否成功的方法。

SearchClientDataGrid(sc);
if (sc.dgClientLog.Rows.Count == 0)
{
    sc.NoItemFoundLabel.Visible = true;
    sc.NoItemFoundLabel.BringToFront();
    return;
}
else
{
    sc.NoItemFoundLabel.Visible = false;
}

它可以工作,但是每当我以字符“%”开头搜索时,例如:%David,它仍然有效,有没有办法删除 %? 我最近在学习 MySql 参数以避免 Sql 注入。 它只是让我觉得 % 确实有效,而不是返回 no found。

为此,您必须使用 mysql 转义字符\转义%字符引用 然后它将不再被视为特殊字符。

所以解决方案是

string search = "%" + sc.sc_SearchBox.Text.Replace("%", @"\%") + "%";
command.Parameters.Add(new MySqlParameter("@search",search));

可能您应该查看引用的表并处理其他特殊字符_这也是LIKE搜索使用的通配符。 另一个 escaping 由 mySQLParameter 处理。 例如,以下将"变为\" (使用参数时在内部应用MySqlHelper.EscapeString

string result = MySqlHelper.EscapeString("foo\"bar");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM