簡體   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