代码之家  ›  专栏  ›  技术社区  ›  Abilash Erikson

php unserize不工作

  •  0
  • Abilash Erikson  · 技术社区  · 8 年前

    我正在MySQL数据库中保存一个序列化数组。 当我从MySQL中获取结果数据并打印这些细节时,它正在打印。

     $data=$row['data'];
    
    
    
    print_r( $data)
    

    结果是

    a:8:{i:0;a:7:{s:2:"id";s:2:"16";s:4:"slug";s:8:"fieldset";s:4:"name";s:8:"Fieldset";s:4:"type";s:8:"fieldset";s:7:"options";s:0:"";s:9:"parent_id";s:1:"0";s:5:"value";s:0:"";}i:1;a:7:{s:2:"id";s:2:"20";s:4:"slug";s:9:"your-name";s:4:"name";s:9:"Your Name";s:4:"type";s:4:"text";s:7:"options";s:0:"";s:9:"parent_id";s:1:"0";s:5:"value";s:11:"SamueljalIL";}i:2;a:7:{s:2:"id";s:2:"21";s:4:"slug";s:10:"your-email";s:4:"name";s:10:"Your Email";s:4:"type";s:5:"email";s:7:"options";s:0:"";s:9:"parent_id";s:1:"0";s:5:"value";s:16:"dimitryg@msn.com";}i:3;a:7:{s:2:"id";s:2:"24";s:4:"slug";s:5:"phone";s:4:"name";s:5:"Phone";s:4:"type";s:4:"text";s:7:"options";s:0:"";s:9:"parent_id";s:1:"0";s:5:"value";s:11:"88621295115";}i:4;a:7:{s:2:"id";s:2:"22";s:4:"slug";s:12:"your-message";s:4:"name";s:12:"Your Message";s:4:"type";s:8:"textarea";s:7:"options";s:0:"";s:9:"parent_id";s:1:"0";s:5:"value";s:1876:"Havе yоu listenеd
     http://boletines.consumer.es/?p=50&u=https://gdfgl/96D4u9";}i:5;a:7:{s:2:"id";s:2:"17";s:4:"slug";s:12:"verification";s:4:"name";s:12:"Verification";s:4:"type";s:12:"verification";s:7:"options";s:0:"";s:9:"parent_id";s:1:"0";s:5:"value";s:0:"";}i:6;a:7:{s:2:"id";s:2:"18";s:4:"slug";s:27:"please-enter-any-two-digits";s:4:"name";s:27:"Please enter any two digits";s:4:"type";s:6:"secret";s:7:"options";s:0:"";s:9:"parent_id";s:2:"17";s:5:"value";s:2:"82";}i:7;a:7:{s:2:"id";s:2:"19";s:4:"slug";s:6:"submit";s:4:"name";s:6:"Submit";s:4:"type";s:6:"submit";s:7:"options";s:0:"";s:9:"parent_id";s:2:"17";s:5:"value";s:0:"";}} 
    

    但当我试图解开这个数据时,它不起作用。

     $arr=unserialize($data);
    
      print_r($arr);
    

    这里没有印刷品;

    2 回复  |  直到 7 年前
        1
  •  1
  •   mickmackusa Tom Green    7 年前

    您的序列化字符串已损坏。当我摩擦水晶球时,我可以想象有人手动执行字符串替换(不适当地)来更新紧接着的URL Have you listened 在索引处的数组中 4 .

    这在分析该位置的数据后显示:

    s:1876:"Havе yоu listenеd
    http://boletines.consumer.es/?p=50&u=https://gdfgl/96D4u9";
    

    您可以看到这个存储值中有81个字节/字符。

    序列化数据严格声明该值必须包含1876个字节/字符。

    最终,您的序列化数据会受到损害——长度或值。

    如果不受当前值的干扰,可以使用以下命令手动修复序列化数据: https://3v4l.org/GqsHu

    这是我的一个职位: https://stackoverflow.com/a/55074706/2943403

    使用提供的代码片段,您可以随时修复损坏的序列化数据,也可以花时间修复所有损坏的数据并更新数据库,这样就不会再次出现这种头疼的问题。

    让这种情况成为开发人员的一个教训——不要试图快速更新序列化数据。您必须取消它的序列化,修改它,然后重新序列化它,以便生成有效的字符串。

        2
  •  0
  •   Sohel Rana    8 年前

    我认为您的序列化数据在存储到数据库时会被截断。这可能是由于列的长度大小。所以增加列的长度并尝试。

    推荐文章