1

我有一个项目,我在其中调用 MySQL 查询,该查询是由我发送给该方法的字符串构建的。

如果字符串有单引号,我会遇到问题'

我想用 a 替换它,\'所以它对 MySQL 是安全的

但是当我建立查询时,我%在字符串的开头和结尾添加了一个单引号和一个;例如'%texthere%'

所以我需要知道如何替换除第一个和最后一个引号之外的每个单引号?

所以它只会从以下位置替换:'%thi'stext%'

对此:'%thi\'stext'%

4

6 回答 6

4

简单的:

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 参数。

于 2013-03-01T04:06:18.787 回答
1

我太愚蠢了,我终于更好地研究了这个方法

我把它修好了string.Replace("'", "\'")

在我在开头和结尾添加&%之前'%'

我从你们那里学到了很多,非常感谢

于 2013-03-01T04:51:14.650 回答
0

我之前这样做的方式如下:

  1. 使用 IndexOf 获取字符第一次出现的索引。
  2. 获取从步骤 1 中找到的索引开始的原始字符串的子字符串
  3. 反转步骤 2 中找到的子字符串
  4. 对步骤 3 中的反转字符串重复步骤 1,您现在得到一个子字符串,其中包含从第一个 ' 字符之后到最后一个字符之前的字符串。
  5. 再次反转步骤 4 中的子字符串(使其恢复到原始顺序)并将剩余的 ' 字符替换为 \'
  6. 使用(伪代码)重建字符串 -

    finalString = string.Concat( originalString.Substring(0, firstIndex), replaceSubstringFromStep5, originalString.Substring(secondIndex, originalStringLength - 1)

这将为您提供一个字符串,其中包含第一个 ' 字符之前和原始字符串中最后一个字符之后的任何内容,并且中间的所有内容都将是替换的 ' 字符,这些字符现在为您的 MySQL 查询转义。

希望这可以帮助!

编辑:请注意,当我这样做时,它是用于互连应用程序中的字符串操作,而不是用于数据库查询。我同意最好使用其他人所说的存储过程和参数;但是,我提供的解决方案,没有进入最佳实践等,将满足 OP 的要求。

于 2013-03-01T04:00:20.757 回答
0

参考下面的链接

从.NET中的字符串中去除双引号

用字符串替换所有双引号

如果没有得到解决方案,希望这个对您有所帮助,而不是告诉我我会提供另一种解决方案

编辑 Okey 所以尝试这样的字符串并反馈

string query=@"%thi'stext%";
于 2013-03-01T04:03:54.273 回答
0

我希望这个方法对你有帮助:假设 raw 匹配模式“'%free text here with single quotes%'”

    private string ReplaceSpecial(string raw)
    {
        return String.Format("'%{0}%'", raw.Substring(2, raw.Length - 2).Replace("'", "\\'"));
    }
于 2013-03-01T04:58:12.147 回答
0

首先使用修剪函数从字符串的每一侧剪切单引号。然后将 "'" 替换为 "\'" 并将单引号添加回字符串的每一侧。如果 ' 是字符串中的第一个或最后一个字符,这将不起作用,因为它会被修剪。

于 2013-03-01T03:48:27.880 回答