php - 反序列化 PHP 数组不起作用

标签 php mysql deserialization blob

我将以下序列化数组存储在 MySQL longblob 数据字段中:

a:1:{s:10:"attributes";a:1:{s:13:"Ticket Holder";a:1:{i:0;s:8:"Joe Blow";}}}

在 PHP 中,当我查询字段、反序列化并打印出来时,会打印以下空数组:

Array
(
)

这是表创建语句:

CREATE TABLE `order` (
  `state` varchar(255) CHARACTER SET ascii DEFAULT NULL,
  `data` longblob,
  `created` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

最佳答案

您的序列化数据无效。您绝不能手动维护序列化数据。

字符串序列化为:

s:<i>:"<s>";

哪里<i>是一个整数,表示 <s> 的字符串长度,和<s>是字符串值。

所以在这种情况下有效数据是:

a:1:{s:10:"attributes";a:1:{s:13:"Ticket Holder";a:1:{i:0;s:8:"Joe Blow";}}}

Joe Blow字符串长度为 8,但在序列化字符串中定义为 13。

参见:Structure of a Serialized PHP string

关于php - 反序列化 PHP 数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45868372/

相关文章:

java - JPA:@ManyToOne,1 表中不必要的重复条目

python - 无法解决python中的Elasticsearch.exceptions.SerializationError以从Elastic Search获取数据

c# - C#反序列化在InvalidOperationException上捕获并继续。怎么样?

java - 如何使用 Kryo 序列化 Multimap?

php - 用户事件数据库结构

php - MySQL:将表连接到自身,消除重复行

mysql - 将列从 Base64 更新为字符串( native 在 SQL 中)

mysql - 将最后一行标记为 MySQL 中的列

php - MySQL从多个相同的表中选择查询并确定结果中的表

php - 修改函数如何获取和查询数据库?