【问题标题】:Why do I have to unserialize this serialized value twice? (wordpress/bbpress maybe_serialize)为什么我必须对这个序列化值进行两次反序列化? (wordpress/bbpress 也许_序列化)
【发布时间】:2011-02-03 18:48:02
【问题描述】:

我在这里做错了什么?我正在序列化一个值,将其存储在数据库(表 bb_meta)中,检索它......到目前为止还好......但是我必须将它反序列化两次。我不应该只反序列化一次吗?这似乎可行,但我想知道我在这里缺少序列化的哪一点。

//check database to see if user has ever visited before.
$querystring = $bbdb->prepare( "SELECT `meta_value` FROM `$bbdb->meta` WHERE `object_type` = %s AND `object_id` = %s AND `meta_key` = %s LIMIT 1", $bbtype, $bb_this_thread, $bbuser );
$bb_last_visits = $bbdb->get_row($querystring, OBJECT);
//if $bb_last_visits is empty, add time() as the metavalue using bb_update_meta
    if (empty($bb_last_visits)) {
        $first_visit = time();
        echo 'serialized first visit: ' . $bb_this_visit_time_serialized = serialize(array($bb_this_thread => $first_visit));
        bb_update_meta( $bb_this_thread, $bbuser, $bb_this_visit_time_serialized, $bbtype ); //add to database, bb_meta table
        echo '$bb_last_visits was empty. Setting first visit time as ' . $bb_this_visit_time_serialized . '<br>';
        } else {
            //else, test by unserializing the data for use.
            echo 'last visit time already set: '; echo $bb_last_visits->meta_value; echo '<br>';
            //fatal error - echo 'unserialized: ' . $bb_last_visits_unserialized = unserialize($bb_last_visits[0]->meta_value); echo '<br>';
            echo 'unserialize: ' . $unserialized_visits = unserialize($bb_last_visits->meta_value); echo '<br>';
            echo 'hmm, need to unserialize again??: '; echo $unserialized_unserialized_visits = unserialize($unserialized_visits); echo '<br>';
            echo 'hey look, it\'s an array value I can finally use now. phew: ' . $unserialized_unserialized_visits[$bb_this_thread];
            }

【问题讨论】:

  • bb_update_meta 函数里面肯定没有序列化?
  • 那是我需要的线索,谢谢。请看下面的答案。
  • 不客气。很好地追踪它。

标签: php wordpress serialization bbpress


【解决方案1】:

bb_update_meta() 是一个 bbPress 函数,它调用了一个名为 maybe_serialize() 的 Wordpress 函数,即“does the boring stuff for you”在这种情况下显然意味着有条件地序列化一个数组。

一个未序列化的数组可以直接传递给这个函数。通过这样做,我避免了取消序列化的需要。

不确定所有努力是否值得性能提升,但至少它具有教育意义。

感谢@webbiedave 点燃了解决这个问题的火花!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多