我想把这个字符串保存到数据库{“表5检查”:“n\u00e1kladov\u00e9 stredisko”}但在mysql db中,是这样一个字符串:{“表5检查”:“nu00e1kladovu00e9 stredisko”}请问“\”在哪里丢失了?谢谢
kmbjn2e31#
mysql将反斜杠字符视为转义字符。如果你这样做:
query = "INSERT INTO foo (json) VALUES ('" + json + "');
你基本上有三个问题:只有一个反斜杠会被解释为转义字符,而不是内容;除非下一个字符是引号或另一个反斜杠,否则它将没有转义,并且默默地消失。如果你的 json 包含任何单引号,幸运的是,您将得到一个语法错误,因为应该包含该值的引号将被关闭,sql无法解析的乱码如下。如果你的 json 包含任何单引号,您就不走运了,您现在是sql注入攻击的受害者,最臭名昭著的例子就是xkcd。为了避免所有这些,请确保在数据进入数据库之前对其进行了适当的清理。这可以通过两种方式实现:这种手动且容易出错的方法包括:在向查询中插入字符串时,始终记住转义任何需要转义的字符。这在数据库之间是不同的。有些数据库希望在引号前加反斜杠,而有些数据库则喜欢将引号加倍,并且不做任何反斜杠操作。有些人两者都允许。许多语言和/或数据库访问库都有以适合数据库的方式执行此操作的函数。自动化的、万无一失的和非常受欢迎的方法是使用参数化查询和准备好的语句,这些查询和语句以透明和易于使用的方式为您完成这项工作。你没有一个特定的语言标签,所以我不能给你的解决方案,但鲍比表网站有许多常用的编程语言的答案。
json
1条答案
按热度按时间kmbjn2e31#
mysql将反斜杠字符视为转义字符。如果你这样做:
你基本上有三个问题:
只有一个反斜杠会被解释为转义字符,而不是内容;除非下一个字符是引号或另一个反斜杠,否则它将没有转义,并且默默地消失。
如果你的
json
包含任何单引号,幸运的是,您将得到一个语法错误,因为应该包含该值的引号将被关闭,sql无法解析的乱码如下。如果你的
json
包含任何单引号,您就不走运了,您现在是sql注入攻击的受害者,最臭名昭著的例子就是xkcd。为了避免所有这些,请确保在数据进入数据库之前对其进行了适当的清理。这可以通过两种方式实现:
这种手动且容易出错的方法包括:在向查询中插入字符串时,始终记住转义任何需要转义的字符。这在数据库之间是不同的。有些数据库希望在引号前加反斜杠,而有些数据库则喜欢将引号加倍,并且不做任何反斜杠操作。有些人两者都允许。许多语言和/或数据库访问库都有以适合数据库的方式执行此操作的函数。
自动化的、万无一失的和非常受欢迎的方法是使用参数化查询和准备好的语句,这些查询和语句以透明和易于使用的方式为您完成这项工作。你没有一个特定的语言标签,所以我不能给你的解决方案,但鲍比表网站有许多常用的编程语言的答案。