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

标签 php mysql serialization

令人困惑的标题,基础知识是我将一个完全排序和有序的多维数组从脚本保存到 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/

相关文章:

php - php 中 get_results 的可能解决方法是什么

php - 如何使用 AJAX 调用更改 SELECT 查询

python - 在 asdict 或序列化的数据类中包含属性的推荐方法是什么?

python - 为什么覆盖 resetful JSONWebTokenSerializer 只保持返回 token ? Python

php - 如何确定从我的 html 表单中获取的输入值的数据类型,以便我可以使用它们在准备好的语句中绑定(bind)参数

javascript - 包含部分内容时可以传递 php 变量吗?

php - OpenCart 在 Controller 外加载模型

MySql 查询按时间分组

c# - 使用未分配的局部变量 - SQL + C#

.net - 奇怪的反序列化错误,子对象没有完全反序列化