Невозможно снять сериализацию массива с помощью PHP - PullRequest
0 голосов
/ 27 октября 2011

Массив в базе данных хранится в виде сериализованной строки, например, такой:

a:1:{i:0;a:4:{s:8:"category";s:26:"Category Name";s:4:"date";s:0:"";s:8:"citation";s:617:"617 Char Length String (shortened on purpose)";s:4:"link";s:0:"";}}

Его структура должна выглядеть примерно следующим образом:

array {
    id => array { category => Value, date => Value, citation => Value, link => Value }
}
* 1006.Использую:
$prevPubs = unserialize($result[0]['citations']);

$result[0]['citations'] - сериализованная строка.$prevPubs вернет false.Что указывает на ошибку, если я не ошибаюсь.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 27 октября 2011

b:0 - логическое значение: false в сериализованном формате. Unserialize НЕ возвращает эту точную строку, она просто возвращает фактическое логическое значение FALSE. Это означает, что все, что вы передаете в вызов unserialize, не является допустимой сериализованной строкой. Скорее всего, он каким-то образом поврежден, что вызвало сбой вызова unserialize.

0 голосов
/ 27 октября 2011

для обработки сериализованных многомерных массивов и mysql используйте это:

<?php
//to safely serialize
$safe_string_to_store = base64_encode(serialize($multidimensional_array));

//to unserialize...
$array_restored_from_db = unserialize(base64_decode($encoded_serialized_string));
?>

Я уверен, что сериализованная строка в вашей базе данных повреждена

0 голосов
/ 27 октября 2011

Вы должны десериализовать всю строку $ result = unserialize ($ serialized);

, а затем использовать индекс $ result [0] ['citation'] массива результатов.

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