【问题标题】:PHP: unserialize() doesn't return an arrayPHP:反序列化()不返回数组
【发布时间】:2011-10-04 10:54:26
【问题描述】:

我在下面有这段代码可以在字段(order_pictures)中插入序列化数据:

  $pictures_id = unserialize($category->getOrderPictures());
  array_push($pictures_id, $picture->getId());
  $category->setOrderPictures(serialize($pictures_id));

我第一次执行它就可以了。至少,它将b:0; 存储在order_pictures 字段中。

但是当我再次执行它时,$pictures_id 的值是bool(false),我希望是一个数组类型。

有什么想法吗?

问候

贾维

【问题讨论】:

  • var_dump($pictures_id);
  • 它说什么var_dump(unserialize($category->getOrderPictures()));?它返回b:0; 还是一个长字符串?
  • var_dump($category->getOrderPictures());请说真的,你没有给我们足够的数据来解决你的问题。
  • var_dump(unserialize($category->getOrderPictures())); 请。对长字符串特别感兴趣。

标签: php serialization


【解决方案1】:

您的问题是您在初始化之前尝试unserialize $category->getOrderPictures() 的内容,所以$pictures_id 在其中得到布尔值false,这是unserialize 失败的结果。然后 array_push() 失败,因为 $pictures_id 不是数组。

试试这个:

$pictures_id = $category->getOrderPictures();
if($pictures_id)
    $pictures_id = unserialize($pictures_id);
else
    $pictures_id = array();
array_push($pictures_id, $picture->getId());
$category->setOrderPictures(serialize($pictures_id));

【讨论】:

    【解决方案2】:

    我第一次执行它就可以了。至少,它存储了 b:0;

    就是这样:b:0; 不是一个数组,而是一个布尔值 (false)

    Unsing PHPs 交互模式 (php -a)

    php > var_dump(unserialize('b:0;'));
    bool(false)
    php > var_dump(serialize(false));
    string(4) "b:0;"
    

    这意味着,序列化可能会给你带来意想不到的结果,你把它放入数据库之前。从数据库读取时,一切正常,但内容不是您所期望的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多