【问题标题】:unserializing data array with php from mysql database使用 php 从 mysql 数据库中反序列化数据数组
【发布时间】:2012-04-01 14:48:13
【问题描述】:

我在 mySQL 数据库中存储了以下序列化 PHP 数组:

a:2:{i:2070;s:4:"0.00";i:1901;s:4:"1.00";}

现在,我设法通过以下方式输出该值:

$my_data=mysql_result($result,$i,"my_data");
echo "$my_data";

但我无法对其进行反序列化。我试过了,但它不起作用:

$my_data=unserialize($my_data);

当我在两者之间添加它时,我得到的只是一个空白页。有什么想法吗?

【问题讨论】:

  • 你打开了 display_errors 吗?或者查看您的错误日志。空白屏幕通常表示某种错误。
  • 我刚刚试了一下,得到了这个: 注意:unserialize() [function.unserialize]: 在第 25 行的 test.php 中偏移 12 个字节的 62 个字节处出错
  • 您是否检查过从数据库返回的字符串与您放入数据库的字符串相同?顺便说一句,将序列化字符串存储在数据库中通常不是一种好习惯。
  • 和 var_dump 显示 bool(false)
  • 是的,字符串是一样的。不幸的是,我的软件开发人员是这样做的,而不是我 :( 我在 unserialize.net 上测试了序列化的字符串,它在那里解码得很好,所以我认为问题一定出在我的最后。

标签: php mysql arrays serialization


【解决方案1】:

也许您应该查看将值插入数据库的过程。是否有可能在值被序列化之后,它们以某种方式被编码,例如 html 实体或其他东西?

我在本地进行了测试,得到了同样的错误信息。这是输出:

a:2:{i:2070;s:4:"0.00";i:1901;s:4:"1.00";} Notice: unserialize(): Error at offset 12 of 62 bytes in /srv/localhost/public_html/test.php on line 6 

这是代码

<?php

$value = htmlentities('a:2:{i:2070;s:4:"0.00";i:1901;s:4:"1.00";}');
echo $value;

unserialize($value);

【讨论】:

  • 这就是问题所在! " 被转换为 HTML 标记。我替换了它们,现在它可以工作了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2016-09-29
  • 2014-11-18
相关资源
最近更新 更多