如何从数据库中的序列化数据中获取值

问题描述 投票:0回答:2

我尝试从我的 woocommerce 模板的 mysql 中的序列化数据中获取值,但我无法成功。我该走哪条路?

这是数据库中的数据;

('meta_id' => '3307','post_id' => '426','meta_key' => 'mphb_season_prices','meta_value' => 'a:12:{i:0;a:2:{s:6:"season";s:3:"252";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:1;a:2:{s:6:"season";s:3:"253";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:2;a:2:{s:6:"season";s:3:"254";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:3;a:2:{s:6:"season";s:3:"255";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:493;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:4;a:2:{s:6:"season";s:3:"256";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:493;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:5;a:2:{s:6:"season";s:3:"257";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:708;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:6;a:2:{s:6:"season";s:3:"258";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:893;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:7;a:2:{s:6:"season";s:3:"259";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:893;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:8;a:2:{s:6:"season";s:3:"260";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:708;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:9;a:2:{s:6:"season";s:3:"261";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:565;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:10;a:2:{s:6:"season";s:3:"262";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:465;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}i:11;a:2:{s:6:"season";s:3:"263";s:5:"price";a:4:{s:7:"periods";a:1:{i:0;i:1;}s:6:"prices";a:1:{i:0;d:422;}s:17:"enable_variations";b:0;s:10:"variations";a:0:{}}}}')
php mysql database wordpress phpmyadmin
2个回答
0
投票

给你:

function fiyatlar_shortcode_function() {
    $post_id = get_the_ID(); //get ID of post shortcode is embedded in
    $var = get_post_meta( $post_id, 'mphb_season_prices', true ); //retrieve as single
    var_dump($var);
}

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

你非常接近,正如我所说,当你使用

get_post_meta
时,wordpress 会为你反序列化,无需你自己执行此操作。

此错误的原因

警告:unserialize() 期望参数 1 为字符串,在 /home 中给出的数组

是因为WordPress已经将数据反序列化成数组了。

您很可能希望 3 参数为 true,否则未序列化的数据将被包装在一个额外的数组中。例如:

 //serialized data (something like this)
 a:1:{s:3:"foo";s:3:"bar";}

 //Original data for example
 ["foo" => "bar"]

 //3rd arg true
 ["foo" => "bar"]

 //default OR 3rd arg false -- extra array
 [["foo" => "bar"]]

或者类似的东西。

哦,别忘了将

return $var;
添加回 ... \(0.o)/


0
投票

我当前正在使用的代码;

function fiyatlar_shortcode_function() {
$post_id = 1182;
$var = get_post_meta( $post_id, 'mphb_season_prices' );
var_dump($var);
}

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

并输出;

array(1) { [0]=> array(12) { [0]=> array(2) { ["season"]=> string(3) "252" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [1]=> array(2) { ["season"]=> string(3) "253" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [2]=> array(2) { ["season"]=> string(3) "254" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [3]=> array(2) { ["season"]=> string(3) "255" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [4]=> array(2) { ["season"]=> string(3) "256" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [5]=> array(2) { ["season"]=> string(3) "257" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1570) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [6]=> array(2) { ["season"]=> string(3) "258" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1715) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [7]=> array(2) { ["season"]=> string(3) "259" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1715) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [8]=> array(2) { ["season"]=> string(3) "260" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1215) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [9]=> array(2) { ["season"]=> string(3) "261" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [10]=> array(2) { ["season"]=> string(3) "262" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } [11]=> array(2) { ["season"]=> string(3) "263" ["price"]=> array(4) { ["periods"]=> array(1) { [0]=> int(1) } ["prices"]=> array(1) { [0]=> float(1070) } ["enable_variations"]=> bool(false) ["variations"]=> array(0) { } } } } }

如果添加反序列化功能;

function fiyatlar_shortcode_function() {
$post_id = 426;
$var = get_post_meta( $post_id, 'mphb_season_prices');
$var = unserialize ($var);   
var_dump($var);
}

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

输出;

bool(false)
Warning: unserialize() expects parameter 1 to be string, array given in /home...

如果我使用“return”而不是“var_dump”,则输出为空并给出与上面相同的警告消息。

© www.soinside.com 2019 - 2024. All rights reserved.