存储在 MySQLi 中的序列化多维不会打印过去的第一个数组


Serialized multidimensional stored in MySQLi does not print past first array

令人困惑的标题,基础知识是我将一个完全排序和有序的多维数组从脚本保存到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不支持这种格式,它只会反序列化第一个块并在最后删除所有内容。

而是创建一个数组,对其进行序列化并将该结果存储到数据库中。

或者,您可以尝试通过对字符串进行分块来暂时恢复,但是如果粘贴正确完成,则存在更多问题。但另一方面,明显的粘贴并不是完全正确的。