无法使用PHP取消序列化数组数组

时间:2011-10-27 17:31:38

标签: php serialization

数据库中的数组存储为序列化字符串,例如:

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 }
}

我正在使用的PHP代码是:

$prevPubs = unserialize($result[0]['citations']);

$result[0]['citations']是序列化字符串。 $prevPubs将返回false。如果我没弄错的话,这表示错误。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

b:0是序列化格式的布尔值:false。 Unserialize不会返回那个确切的字符串,它只返回一个实际的布尔值FALSE。这意味着无论您传入unserialize调用的是什么,都不是有效的序列化字符串。很可能它以某种方式被破坏,导致unserialize调用失败。

答案 1 :(得分:0)

您必须反序列化整个字符串 $ result = unserialize($ serialized);

然后使用结果数组的$ result [0] ['citation']索引。

答案 2 :(得分:0)

为了处理序列化的多维数组和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));
?>

我非常确定数据库中的序列化字符串已损坏