【发布时间】:2011-12-15 06:52:31
【问题描述】:
我一直在尝试将一个 json 编码的字符串压缩并存储到 mysql 中,但我收到“意外 /”错误。
我也尝试过像这样使用 addlashes:
addslashes(gzcompress(json_encode($mystring)));
并显示
json_decode(gzuncompress(stripslashes($mystring)));
但是插入失败,出现我提到的错误。
我在某处读到了一个带有 gzcompress 的字符串应该存储为 blob,但我希望有一种方法可以将它存储在 mysql 文本字段中,这样我就不必弄乱数据库了。
PS:有些人在这里要求提供完整的错误信息:
警告:输入中出现意外字符:'\' (ASCII=92) state=1
PDOException: SQLSTATE[HY000]: 一般错误: 1366 字符串不正确 值: '\x9C\xED}\x8Br\xDB...' 列 'field_text_value' 在 第 1 行。
【问题讨论】:
-
应该使用 mysql_real_escape_string 而不是添加斜杠(并不是说这会解决这个问题;我的意思是一般来说)。 addlashes 不知道字符集,而 mysql_real_escape_string 实际上知道数据库连接,可以更准确地转义数据。 addlashes() 是 PHP 为帮助编码人员所做的许多不应该做的事情之一。
-
感谢 Corbin,我也会检查一下。顺便说一下,谁减去这个,请解释原因。
-
在关系数据库中存储“大数组”没有多大意义。向他们提供的问题不是完整的错误消息,而是提供一个存根说“意外/”的问题就更没有意义了。甚至无法判断,这个 stub 是代码的哪一部分发出的
-
@Corbin mysql_real_escape_string 也不知道,除非您另有明确说明。因此,仅建议“使用它,而不是添加斜杠”实际上根本不会改变。
-
你确定吗? “转义 unescaped_string 中的特殊字符,考虑到连接的当前字符集,以便将其放在 mysql_query() 中是安全的。”而关于可选的连接参数:“如果没有指定链接标识符,则假定最后一个被mysql_connect()打开的链接。”
标签: php mysql text compression gzip