【问题标题】:Conditional PHP unserialize function条件 PHP 反序列化函数
【发布时间】:2016-11-16 13:41:48
【问题描述】:

首先,如果这似乎是一个愚蠢的问题,我很抱歉。我是这个“反序列化”命令的新手,我在这里阅读了很多关于它的信息,但我仍然真的不知道如何实现它来获得我需要的东西。

让我解释一下我现在有什么,我需要什么。

我现在有这个代码:

$consultametacat = $wpdb->get_row("
    SELECT post_id,
           meta_key,
           meta_value
      FROM cg_postmeta
     WHERE post_id = '".$consultapost->ID."' 
       AND meta_key LIKE '_category_permalink'
    ",
    ARRAY_A
);

这会将查询的结果保存到 ARRAY_A 中的数据库中

然后我在像这样的其他行上得到这个值:

$category_color = get_tax_meta($consultametacat['meta_value'],'pm_color_field_id');
$category_name = get_term_by('id', $consultametacat['meta_value'], 'category',ARRAY_A);
$category_name = get_term_by('id', $consultametacat['meta_value'], 'category',ARRAY_A);
$category_link=get_category_link($consultametacat['meta_value']);

到目前为止,它运行良好,因为 meta_value 直到两周前还是一个整数。现在,数据库中“_category_permalink”字段中的旧条目具有整数,但新条目具有如下序列化数据:

a:1:{s:8:"category";s:2:"23";}

所以,我需要做的是设置一个条件并根据该条件进行反序列化,以始终获得一个整数。逻辑是这样的:

-如果结果为

$consultametacat = $wpdb->get_row("
     SELECT post_id,
            meta_key,
            meta_value
       FROM cg_postmeta
      WHERE post_id = '".$consultapost->ID."'
        AND meta_key
       LIKE '_category_permalink'
     ",
     ARRAY_A
);

是一个整数,然后正常保存该值。但如果它导致序列化的行,然后反序列化,获取数值(在我的示例中,来自行 a:1:{s:8:"category";s:2:"23";} 的 23)和保存该数值。

如何做到这一点?

非常感谢您提前提供的所有帮助。

【问题讨论】:

    标签: php serialization deserialization


    【解决方案1】:

    您必须首先检测您的结果是否已序列化,然后再处理它,如果没有其他事情要做:

    if(strpos($consultametacat,':{')!==false){
      $consultametacat = unserialize($consultametacat);
      $consultametacat = array_shift($consultametacat);//or = $consultametacat['category'];
    }
    

    strpos()$consultametacat 中检测到:{ 并返回他的位置,并且每个序列化的数据都有这个部分。但是serialize() 也可以序列化对象和其他类型,因此请自行研究该主题。

    【讨论】:

    • 非常感谢你,JOUM!这是成功的代码: if(strpos($consultametacat['meta_value'],':{')!==false){ $consultametacat = unserialize($consultametacat['meta_value']); $consultametacat['meta_value'] = $consultametacat['category']; }
    猜你喜欢
    • 2011-08-11
    • 2014-11-18
    • 2014-03-19
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2014-03-24
    • 2011-02-02
    相关资源
    最近更新 更多