从数据库检索时序列化数组中断

时间:2011-12-23 03:15:30

标签: php mysql serialization deserialization

我在mysql数据库中保存数据。此数据是一个数组,内容是登录到我的系统的当前用户的不同数据。

我保存到数据库时执行此操作:

$data = addslashes(serialize($array));

然后

"UPDATE or INSERT INTO TABLE SET ... data = '$data';"

现在,由于插入或更新语句从我的php代码返回有效,因此数据被正确保存。

我的问题是,当我尝试取消序列化时,它返回false并在我的页面中显示通知。

我做错了什么?

2 个答案:

答案 0 :(得分:23)

我敢打赌你的mysql数据库中的字段不够大,无法保存所有字符。这就是为什么当你取消序列化它时,你得到一个通知而没有任何回报。

尝试将字段增加到MEDIUMBLOBMEDIUMTEXT(最大长度为16,777,215)或LONGBLOBLONGTEXT(最大长度为4,294,967,295),如下所示:

ALTER TABLE your_table MODIFY COLUMN column_name MEDIUMTEXT /* other properties*/;

尝试再次保存并读取您的数据。

现在,如果您的数据超过4,294,967,295(LONGBLOB或LONGTEXT),您可能应该检查保存的数据类型,也可以过滤或删除不需要的数据。

答案 1 :(得分:0)

从表中获取数据后,是否在unserialize函数之前删除了斜杠。

尝试在没有addslashes()的情况下插入,并在将数据带入数组之前添加斜杠。