сериализация — условная функция PHP для десериализации

Прежде всего, я прошу прощения, если это кажется глупым вопросом. Я новичок в этой команде «unserialize», и я читал здесь много информации об этом, но я все еще не знаю, как реализовать ее, чтобы получить то, что мне нужно.

Позвольте мне объяснить, что у меня сейчас и что мне нужно.

У меня есть этот код сейчас:

$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
);

целое число, затем сохраните это значение как обычно. Но если это приводит к сериализованной строке, то unserialize, получить числовое значение (в моем примере, 23 из строки a: 1: {s: 8: «category»; s: 2: «23»;}) и сохранить это числовое значение.

Как этого добиться?

Большое спасибо за всю вашу помощь заранее.

0

Решение

Сначала вы должны обнаружить, что ваш результат сериализован, а затем позаботиться об этом, если не делать больше ничего:

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

strpos() детектирует :{ в $consultametacat и возвращает свою позицию, и в каждой сериализованной информации есть эта часть. Но serialize() Можно также сериализовать объекты и другие типы, так что изучите для себя немного больше на эту тему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector