我已将此字符串保存到数据库
{“ form_5_check”:“ N \ u00e1kladov \ u00e9 stredisko”}
但是在mysql db中是这个字符串:
{“ form_5_check”:“ Nu00e1kladovu00e9 stredisko”}
请问“ \”在哪里丢失了?非常感谢
答案 0 :(得分:1)
MySQL将反斜杠字符视为转义字符。如果您做了这样的事情:
Traceback (most recent call last):
File "train.py", line 17, in <module>
model = applications.inception_resnet_v2.InceptionResNetV2(include_top=False, weights='imagenet', input_shape = (img_width, img_height, 3))
File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/keras_applications/inception_resnet_v2.py", line 243, in InceptionResNetV2
weights=weights)
File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/keras_applications/imagenet_utils.py", line 296, in _obtain_input_shape
'`input_shape=' + str(input_shape) + '`')
ValueError: The input must have 3 channels; got `input_shape=(182, 182, 3)`
您基本上有三个问题:
您拥有的单个反斜杠将被解释为转义字符,而不是内容;除非下一个字符是引号或其他反斜杠,否则它什么也不会逃逸,并且会静默消失。
如果您的query = "INSERT INTO foo (json) VALUES ('" + json + "');
包含任何单引号,并且很幸运,您将收到语法错误,因为原本应包含该值的引号将被关闭,并且使SQL感到不安。 t解析如下。
如果您的json
包含单引号,并且您不走运,那么您现在是SQL注入攻击的受害者,最臭名昭著的例子是XKCD。 / p>
为避免所有这些情况,请确保在数据到达数据库之前已对其进行正确的清理。这可以通过两种方式完成:
手动且容易出错的方法包括,每次将字符串插入查询时,都要记住要转义任何需要它的字符。这在数据库之间是不同的。一些数据库希望在引号前使用反斜杠,而另一些数据库则希望将引号加倍并且不对反斜杠进行任何操作。有些允许两者。许多语言和/或数据库访问库都具有以适合数据库的方式执行此操作的功能。
一种自动化,万无一失且非常受人欢迎的方法是使用参数化查询和准备好的语句,它们以透明且易于使用的方式为您执行此操作。您没有标记特定的语言,因此我无法为您提供解决方案,但是Bobby Tables网站提供了许多常用编程语言的答案。