数据库中的数组存储为序列化字符串,例如:
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
。如果我没弄错的话,这表示错误。
非常感谢任何帮助。
答案 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));
?>
我非常确定数据库中的序列化字符串已损坏