PHP: unserialize () не возвращает массив - PullRequest
0 голосов
/ 13 июля 2011

У меня есть этот код ниже, чтобы вставить сериализованные данные в поле (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), и я ожидал тип массива.

Есть идеи?

Привет

* 1016 Javi *

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Ваша проблема в том, что вы пытаетесь 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 голос
/ 13 июля 2011

Работает нормально, когда я запускаю его в первый раз. По крайней мере, он хранит 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;"

Это означает, что сериализация , вероятно, даст вам неожиданные результаты, за до того, как вы положите его в базу данных. При чтении из базы данных все работает нормально, но контент не тот, что вы экспериментируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...