令人困惑的标题,基础知识是我将一个完全排序和有序的多维数组从脚本保存到 MySQL 中。然后,我在另一页上,将其从数据库中拉出并反序列化,然后继续打印出来,
$s = "SELECT * FROM gator_historical_data WHERE channelid = '{$chanid}'";
$r = $link->query($s);
$comboarray = array();
while ($row = mysqli_fetch_assoc($r)) {
$comboarray[] = unserialize($row['dataarray']);
}
foreach ($comboarray as $item) {
$desc = $item['content']['description'];
$title = $item['content']['title'];
$datetime = $item['datetime'];
// ... ^^^ problems getting array data
}
问题是它没有从 MySQL 获取完整的数组,只有第一个条目,因此只打印第一个“数组”。所以 dataarray 的返回值看起来像这样 (var_dump):http://pastebin.com/raw.php?i=Z0jy55sM存储在未序列化的 $comboarray 中的数据看起来像这样(var_dump):http://pastebin.com/raw.php?i=Ycwwa924
TL;DR:从数据库中提取一个序列化的多维数组,反序列化并丢失第一个数组之后的所有数组。
有什么想法吗?
最佳答案
你得到的字符串是一个序列化字符串加上最后的一些东西,它也是一个一次又一次的序列化字符串:
a:3:{s:6:"source";s:25:"World news | The Guardian";s:8:"datetime ...
... story01.htm";}}a:3:{s:6:"source";s:16:"BBC News - World";
^^^
PHP unserialize
不支持这种格式,它只会反序列化第一个 block 并在最后丢弃所有内容。
而是创建一个数组,将其序列化并将结果存储到数据库中。
或者,您可以暂时尝试通过取消分块字符串来恢复,但是如果粘贴正确,则会出现更多问题。但另一方面,明显的粘贴并不完全正确。
关于php - 存储在 MySQLi 中的序列化多维不打印过去的第一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27622078/