我在下面的代码中将序列化数据插入字段(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)
,我期望一个数组类型。
有什么想法吗?
此致
哈维
答案 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;"
这意味着,序列化可能会为您提供意想不到的结果,在之前将其放入数据库中。从数据库中读取一切正常,但内容不是,你所说的。