【问题标题】:how to get this value from mysql database如何从mysql数据库中获取这个值
【发布时间】:2019-11-08 10:05:29
【问题描述】:

我正在制作一个 wordpres 网站。我尝试从 mysql DB 中获取一个值。实际上,我设法获得了很多价值。但是这个太复杂了。 例如; DB中有一个值。它的 meta_key => 'th_room_price' 和 meta_value => '499' 然后我用 meta_key 创建一个简码并获取 meta_value。

但现在还有另一个非常复杂的值。它的 meta_key => mphb_season_prices 和 meta_value =>(它在下面) 这里有 12 个单独的价格,我不知道如何分别获得每个价格。有人可以帮忙吗?

这些是数据库中别墅的值;

('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:{}}}}')

顺便说一句,这是我的简码之一;

function fiyat_shortcode_function() {
$cekilen_deger = get_post_meta( get_the_ID(), 'th_room_price', true );
$var = $cekilen_deger;
return $var;
}
add_shortcode( 'villa_fiyat', 'fiyat_shortcode_function' );

EDIT-最终代码; (还是不行)

function fiyatlar_shortcode_function() {
$var    = get_post_meta( get_the_ID(), 'mphb_season_prices', true);
$var    = unserialize($var);
$season = 252; // 252 january, 253 february, 254 march...

   $foo = array_column($var, 'price', 'season');

}          

print_r($foo[$season]['prices'][0]);

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

--编辑4

function fiyatlar_shortcode_function() {
$var    = get_post_meta( get_the_ID(), 'mphb_season_prices', true);
$var    = unserialize($var);

return $var; 
}

add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

--编辑5

function fiyatlar_shortcode_function() {
$va_form = get_post_meta( get_the_ID(), 'mphb_season_prices');
var_dump($va_form);
}
add_shortcode( 'fiyat_tablosu', 'fiyatlar_shortcode_function' );

并编辑 5 输出:array(0){}

【问题讨论】:

  • 源数据是 PHP 序列化数据,所以我还添加了 PHP 标记。MySQL 无法处理或解析,因此您需要将所有表数据/记录数据流式传输到 PHP 进行处理和搜索in.. 所以最好考虑使用更好的方法,如normalisation 或使用 MySQL 可以选择/解析/搜索的 JSON..
  • 抱歉,这是您的第一条评论?我正在编辑问题。请再次检查问题。和 ty 新标签
  • “对不起,这是您的第一条评论?我正在编辑问题。请再次检查问题。”我的评论建议在问题编辑后仍然有效..
  • 什么季节$foo = array_column($var, 'price', 'season') 然后$foo[$season]['prices'][0] sandbox
  • @ArtisticPhoenix OMG!你真是太棒了。从心底里感谢你。但我有一个小问题。我必须让每个房间都特别!怎么做?请从上面检查我的简码的最终外观。(编辑 3)我只想再问一个问题。我有 12 个季节,我将创建一个价格表。那么我应该为每个季节分别制作短代码吗?或者我可以制作这个单一的 shorcode 吗?

标签: php mysql database wordpress phpmyadmin


【解决方案1】:

我目前正在使用的代码;

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”,则输出为空,并给出与上述警告消息相同的信息。

【讨论】:

    【解决方案2】:

    给你:

    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 为真,否则未序列化的数据将被包装在一个额外的数组中。例如:

     //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)/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-17
      • 2019-10-19
      • 2012-03-10
      • 2016-10-18
      • 2020-01-25
      • 2017-02-06
      • 2015-11-25
      • 2017-11-15
      相关资源
      最近更新 更多