php - 解码从 mysql 数据库中检索到的字符串

标签 php mysql

我正在使用 php 7.1.8 并且我将以下字符串保存在我的 mysql 数据库中:

$dat = a:5:{i:0;s:4:"6162";i:1;s:4:"6160";i:2;s:4:"6236"; i:3;s:4:"6326";i:4;s:4:"6308";

我尝试使用以下内容转换 $dat:

$dat = json_decode($dat, true);

但是,json_decode() 返回 null

对我做错了什么有什么建议吗?

最佳答案

这显然是一个序列化数组,所以我们使用

unserialize()

不是

json_decode();

我怎么知道,这些 a:5:{..} i:0s:4:"6162" 这个是类型和数量/计数/长度。所以 a 是包含 5 个项目的数组,int 0string 4 "6162"。

如果这是 JSON,它将类似于 '["6162","6160","6308"... ]'。如您所见,JSON 占用的空间也少得多。

但是,这是序列化采用的形式。那就是说有一个用于 session 的特殊序列化,我不太熟悉,但我认为这不是那个,特别是如果它来自 wordpress。

请注意,虽然 Json 可以手动编辑而不是直截了当,但不要尝试使用这种类型的序列化,它可以完成,但它会带来灾难......大声笑

一般来说,你可以把它们看作是同一类函数,它们都将复杂的结构转换为字符串。序列化具有将整个对象存储在字符串中的好处(如果您想这样称呼),这是 JSON 本身无法做到的。但是(序列化)是 PHP 的东西,所以它使数据的可移植性降低。如果你保存对象更不用说,这就是为什么我说它可能是一个好处,只有在考虑到将来使用这些数据之后才应该这样做,因为它只能由 PHP 使用,并且只有当那些类保存在它仍然可以访问(如果保存了对象)。

这就是为什么很多时候您可能会看到使用 JSON 而不是序列化。

 $dat = 'a:5:{i:0;s:4:"6162";i:1;s:4:"6160";i:2;s:4:"6236";i:3;s:4:"6326";i:4;s:4:"6308";}';
 var_export(unserialize($dat));

输出

array (
  0 => '6162',
  1 => '6160',
  2 => '6236',
  3 => '6326',
  4 => '6308',
);

实时测试 Sandbox

关于php - 解码从 mysql 数据库中检索到的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51911355/

相关文章:

通过 Composer 设置项目时 PhpStorm "empty path to php"

javascript - 如何使用 javascript 禁用除按钮之外的所有表单字段

mysql - 为什么这个 MySQL 查询花费这么长时间?我该如何修复它?

php mysql ajax 注册表单与图像上传

php - 基于另一个下拉菜单的下拉菜单项

php - 使用空白字段条目更新,MySql 将其显示为零

php - 不使用 setter 和 getter 真的错了吗?

php - 使用 insert 到 mySQL 时编码不起作用,ä (ä) 变为 ¤(¤)

Java JPQL,连接表,多对多关系

php - 错误 : Your PHP installation appears to be missing the MySQL extension which is required by WordPress