【问题标题】:Storing array in db using serialize but get offset error when unserializing it back in php.使用序列化将数组存储在数据库中,但在将其反序列化回 php 时会出现偏移错误。
【发布时间】:2014-10-22 10:09:15
【问题描述】:

我有一个朋友 ID 数组,我正在尝试将此列表存储在每个用户的数据库中。

$share_friend_id = ( serialize($share_id_array));

我的数据库如下所示: 1510161011146851 John a:2:{i:0;s:8:"Kabo Lee";i:1;s:6:"Bo Lee";} a:2:{i:0;s:15:"601599471189716" ;i:1;s:16:"15327449...

第一列是用户ID,然后是姓名,然后是已使用序列化函数从数组转换为字符串的朋友ID列表。

我正在尝试在 php.ini 中获取这些数据。我有以下内容:

     while ($row = $friendresult->fetch_assoc()) {
     //for friend(s)
    $id[] = $row['friend_id'];
    $name = $row['friend_name'];
    $friend_share_friend_id  = ($row['share_friend_id']);
    }

$data = array();    
$data = ( unserialize($friend_share_friend_id));
print_r($data);

但是我得到了错误:注意:unserialize(): Error at offset 61 of 60 bytes in C:\xampp\htdocs\app\sql.php

我不确定使用序列化函数是否是个好主意。有人有什么建议或意见吗?

【问题讨论】:

  • 这个数据库调用是返回多行还是只返回一行?
  • @fondillusions 你可以尝试使用 var_dump() 打印 $friend_share_friend_id 吗?并向我们​​展示结果
  • 你可以使用 json_encode / json_decode 函数来代替序列化吗?
  • @MohammadAlabed 它之前确实有效,但现在我得到了错误偏移量。我做了 var_dump,这就是我得到的:string(60) "a:2:{i:0;s:15:"601599473289716";i:1;s:16:"1532744956945336";"
  • @user574632 - 预计会返回多行不同的用户 ID...我正在尝试获取他们的好友 ID 列表。

标签: php mysql facebook-graph-api serialization multidimensional-array


【解决方案1】:

尝试下一个

<?php
$share_friend_id = ( serialize($share_id_array));
$share_friend_id_2  = unserialize($share_friend_id);
var_dump($share_friend_id_2);  
?>

如果它工作没有任何问题,这意味着数据库中的字段没有足够的空间来存储所有数据字符串

【讨论】:

  • 我是创建数据库的新手。那可能在。我有 varchar 字符串 - 长度 60 :S 可能不够大。我可以分配多大?即使我不需要也分配大长度是否重要?
  • 我刚刚将它更改为 600 但我仍然收到错误。
  • 尝试将类型设为 TEXT 而不是 varchar
  • 即使值是数字?
  • 当然是的,因为序列化返回的是字符串,只是试试看是不是大小的问题
猜你喜欢
  • 1970-01-01
  • 2016-09-17
  • 2011-08-03
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 2014-01-28
  • 2013-12-18
相关资源
最近更新 更多