【问题标题】:Serialized array breaks on retrieval from database从数据库检索时序列化数组中断
【发布时间】:2011-12-23 03:15:29
【问题描述】:

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

我在保存到数据库时这样做:

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

然后

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

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

我的问题是当我尝试对其进行反序列化时,它返回 false 并在我的页面中显示一条通知。

我做错了什么?

【问题讨论】:

  • 你能发布你用来反序列化数据的代码和你得到的错误..

标签: php mysql serialization deserialization


【解决方案1】:

我敢打赌,您的 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),也许您应该检查您保存的数据类型,并可能过滤或删除不需要的一些数据。

【讨论】:

    【解决方案2】:

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

    尝试在不使用 addslashes() 的情况下插入,并在将斜杠添加到数组之前添加斜杠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-17
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多