在 MySQL 表中同时插入和更新转义字符、单引号和双引号

Posted

技术标签:

【中文标题】在 MySQL 表中同时插入和更新转义字符、单引号和双引号【英文标题】:insert and update escape charcter, simple and double quotes in the same time in a MySQL table 【发布时间】:2012-12-11 01:13:50 【问题描述】:

我担心在 mysql 表 w 中插入文本。 我必须插入/更新包含 / " 和 ' 等字符的文本

只有在启用 NO_BACKSLASH_ESCAPES SQL 模式时才能插入转义字符 /。干扰字符 " 和 ' 请参阅此链接 http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences

如果有人能解释一下 mysql_real_escape_string() 我不会低调

我想找一个纯mysql的解决方案 我没有使用 php。我在这里要做的是“模拟”内容管理系统:我即将编写一个 C# 编码的解决方案来管理不同形式的内容(文章、类别、标签等)并生成 .html 文件, MySQl 数据库在我的计算机中是本地的,接下来我会将 .html 文件上传到服务器。

我这样做是为了确保我所有的 html 页面都是 html 有效的,并且因为我不信任任何现有的解决方案(不仅涉及编码,而且在一般生活中)

请帮忙

【问题讨论】:

【参考方案1】:

每个 php db 连接扩展(mysql, mysqli, pdo)都有一个特殊的方法来安全查询sql注入,当你使用mysql扩展时,强烈建议使用mysql_real_escape_string()函数使查询中使用的所有变量安全,它是使用最广泛的功能。我认为没有任何纯粹的解决方案(当您在 php 中使用 mysql 扩展时)。 来自 php.net:

mysql_real_escape_string() - 转义特殊字符 unescaped_string,考虑到当前字符集 连接,以便将其放置在 mysql_query() 中是安全的。

【讨论】:

mysql_real_escape_string() 与注入无关。它不会使任何字符“安全”。它不应该用于“所有变量”。它不是“强烈推荐”,因为它只是一个字符串格式化工具:所以,它不是“推荐”但应该用于格式化字符串,但不应该用于其他任何东西 那么告诉我在使用 mysql 扩展时如何制作安全的变量?还有其他方法吗?? 我没有使用 php。我在这里要做的是“模拟”内容管理系统:我即将编写一个 C# 编码的解决方案来管理不同形式的内容(文章、类别、标签等)并生成 .html 文件, MySQl 数据库在我的计算机中是本地的,接下来我会将 .html 文件上传到服务器。我这样做是为了确保我所有的 html 页面都是 html 有效的,因为我不相信任何现有的解决方案(不仅涉及编码,而且在一般生活中)【参考方案2】:

任何字符串数据都可以插入到 SQL 查询中,如果按照 2 条规则格式化

用引号括起来(最好是单引号) 通过mysql_real_escape_string()传递

如果两个规则都遵循,那么无论是斜线、引号还是任何字符,都不会出现任何问题。

根据您的问题,/ 在 MySQL 中没有特殊含义。 \ 是转义字符。它也可以被另一个反斜杠转义。

$str = 'slashes \ quotes \' or whatever " else symbols';
var_dump($str);
$str = mysql_real_escape_string($str);
$sql = "INSERT INTO table SET str='$str'";

【讨论】:

是的,我很抱歉转义字符是 \ 而不是 /,谢谢 能否请您更具体地了解如何实施您的解决方案,因为我不是 mysql 专家。请注意,我使用的不是 php 或类似的解决方案,只是 MySQL 。谢谢

以上是关于在 MySQL 表中同时插入和更新转义字符、单引号和双引号的主要内容,如果未能解决你的问题,请参考以下文章

mysql 转义字符

mysql 转义字符问题

如何在oracle中插入含有半角单引号'的字符串

在 Xpath 中同时转义双引号和单引号

oracle 如何插入带有引号''和连接符的字符串

mysql怎么样才能插入单引号