Почему я должен сериализовать это сериализованное значение дважды?(wordpress / bbpress Maybe_serialize) - PullRequest
2 голосов
/ 02 апреля 2010

Что я здесь не так делаю? Я сериализирую значение, сохраняю его в базе данных (таблица 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];
            }

1 Ответ

3 голосов
/ 02 апреля 2010

bb_update_meta () - это функция bbPress, которая вызывает функцию Wordpress под названием Maybe_serialize (), которая « делает скучные вещи для вас », что, очевидно, в этом случае означает условную сериализацию массива.

Несериализованный массив может быть напрямую передан этой функции. Тем самым я избежал необходимости отменять сериализацию.

Не уверен, что все усилия стоили прироста производительности, но, по крайней мере, это было образовательно.

Спасибо @webbiedave за то, что зажгли искорку, которая решила это!

...