我有一个c#项目,我在其中调用 MySQL 查询,该查询是由我发送给该方法的字符串构建的。
如果字符串有单引号,我会遇到问题'
我想用 a 替换它,\'
所以它对 MySQL 是安全的
但是当我建立查询时,我%
在字符串的开头和结尾添加了一个单引号和一个;例如'%texthere%'
所以我需要知道如何替换除第一个和最后一个引号之外的每个单引号?
所以它只会从以下位置替换:'%thi'stext%'
对此:'%thi\'stext'%
简单的:
int first = s.IndexOf('\'');
int last = s.LastIndexOf('\'');
string prefix = s.Substring(0, first+1);
string query = s.Substring(first+1, last-first-1);
string suffix = s.Substring(last);
s = prefix + query.Replace("'", "\\'") + suffix;
当然,您应该真正使用 SQL 参数。
我太愚蠢了,我终于更好地研究了这个方法
我把它修好了string.Replace("'", "\'")
在我在开头和结尾添加&%
之前'
%
'
我从你们那里学到了很多,非常感谢
我之前这样做的方式如下:
使用(伪代码)重建字符串 -
finalString = string.Concat( originalString.Substring(0, firstIndex), replaceSubstringFromStep5, originalString.Substring(secondIndex, originalStringLength - 1)
这将为您提供一个字符串,其中包含第一个 ' 字符之前和原始字符串中最后一个字符之后的任何内容,并且中间的所有内容都将是替换的 ' 字符,这些字符现在为您的 MySQL 查询转义。
希望这可以帮助!
编辑:请注意,当我这样做时,它是用于互连应用程序中的字符串操作,而不是用于数据库查询。我同意最好使用其他人所说的存储过程和参数;但是,我提供的解决方案,没有进入最佳实践等,将满足 OP 的要求。
参考下面的链接
如果没有得到解决方案,希望这个对您有所帮助,而不是告诉我我会提供另一种解决方案
编辑 Okey 所以尝试这样的字符串并反馈
string query=@"%thi'stext%";
我希望这个方法对你有帮助:假设 raw 匹配模式“'%free text here with single quotes%'”
private string ReplaceSpecial(string raw)
{
return String.Format("'%{0}%'", raw.Substring(2, raw.Length - 2).Replace("'", "\\'"));
}
首先使用修剪函数从字符串的每一侧剪切单引号。然后将 "'" 替换为 "\'" 并将单引号添加回字符串的每一侧。如果 ' 是字符串中的第一个或最后一个字符,这将不起作用,因为它会被修剪。