PHP:unserialize()不返回数组

时间:2011-07-13 12:15:04

标签: php serialization

我在下面的代码中将序列化数据插入字段(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),我期望一个数组类型。

有什么想法吗?

此致

哈维

2 个答案:

答案 0 :(得分:2)

您的问题是,您在初始化之前尝试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));

答案 1 :(得分:1)

  

我第一次执行它时工作正常。至少,它存储b:0;

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

取消PHPs交互模式(php -a

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

这意味着,序列化可能会为您提供意想不到的结果,之前将其放入数据库中。从数据库中读取一切正常,但内容不是,你所说的。