如何在C#中转义mysql字符串以用于LIKE
我想在我的标签列表中找到一个单词。它们可以在开头、结尾或中间,所以我试着写作如何在C#中转义mysql字符串以用于LIKE,mysql,Mysql,我想在我的标签列表中找到一个单词。它们可以在开头、结尾或中间,所以我试着写作 Where name like "%@0%" 那不管用,所以我试了一下 @"LIKE ""%" + MySql.Data.MySqlClient.MySqlHelper.EscapeString(q) +@"%" 我认为这很有效,所以我试着搜索%。结果显示了我所有的标签,我希望标签中只有%的标签(这样就不会有ATM) 如何正确地转义字符串?然后用它来搜索文本的中间部分 -编辑- 解决方案如下所示。我做了几次测试,结
Where name like "%@0%"
那不管用,所以我试了一下
@"LIKE ""%" + MySql.Data.MySqlClient.MySqlHelper.EscapeString(q) +@"%"
我认为这很有效,所以我试着搜索%。结果显示了我所有的标签,我希望标签中只有%的标签(这样就不会有ATM)
如何正确地转义字符串?然后用它来搜索文本的中间部分
-编辑-
解决方案如下所示。我做了几次测试,结果都通过了。问题是
... where n.name LIKE CONCAT("%", @some_name , "%") ...;
然后在代码中
cmd.Parameters.AddWithValue("@some_name", val.Replace("\\", "\\\\").Replace("_", "\\_").Replace("%", "\\%")));
您还需要转义字符串中的
%
和
字符,因为这些字符是LIKE
运算符使用的特殊通配符:
@"LIKE ""%" +
MySql.Data.MySqlClient.MySqlHelper.EscapeString(q)
.Replace("_", "\\_").Replace("%", "\\%") +
@"%"
你可以考虑用静态方法包装这个文件。
我会添加进去,但感觉像个黑客。编辑-geeze,它甚至没有转义”。我根本不能使用MySqlHelper.EscapeString。这不起作用。尝试使用参数化查询。然后您的查询文本将是…像CONCAT(“%”,@likeParm,“%”)
。然后只需对字符串应用两个Replace
方法,即可将其作为@likeParm
传递。嗯,关闭。确定此操作适用于。Replace(“\\”,“\\\”)。Replace(“,“\\\”)。Replace(“,“\\\\”)。Replace(“%,“\\\%”))
-编辑-我不能+1,因为我在45分钟前将其取消,请确保您也引用引号,否则您将容易受到SQL注入的攻击。使用参数化查询确实是最好的方法。