Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中转义mysql字符串以用于LIKE_Mysql - Fatal编程技术网

如何在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注入的攻击。使用参数化查询确实是最好的方法。