代码之家  ›  专栏  ›  技术社区  ›  Conor Campbell

Wordpress从数据库中的序列化字符串返回特定的键和值

  •  0
  • Conor Campbell  · 技术社区  · 7 年前

    我正忙于尝试从WP数据库中的序列化字符串中提取特定数据。原始字符串如下所示:

    {"params":{"1":{"key":"1","enabled":"1","value":"Yes"},"2":{"key":"2","enabled":"1","value":"No"}}}
    

    我可以(显然)使用以下代码检索此字符串:

    $results = $wpdb->get_var("SELECT options FROM wp_wpl_dbst WHERE table_column = '{$id}'");
    $parseme = unserialize($results);
    

    但是,我无法从我刚刚创建的数组中提取任何值。

    我尝试了以下代码的一些变体,所有这些都会导致相同的错误:

    foreach ($parseme as $parsed) {
        $return_string .= $parsed['key'] . '<br>';
        $return_string .= $parsed['value'] . '<br>';
    }
    

    错误是:

    警告:在第236行/usr/www/users/../functions.php中为foreach()提供的参数无效

    任何意见都将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Xhynk    7 年前

    显示的原始字符串不是序列化字符串。序列化字符串中包含键长度,如下所示: a:2:{i:0;s:4:"test";i:1;a:2:{i:0;s:4:"test";i:1;R:3;}} . 你要找的其实是 JSON .

    所以你应该可以替换 unserialize($results) 具有 json_decode( $results, true ) 然后就可以访问关联数组了。注意,您仍然有一个外部数组 params 钥匙。以下面的代码为例

    $results       = '{"params":{"1":{"key":"1","enabled":"1","value":"Yes"},"2":{"key":"2","enabled":"1","value":"No"}}}';
    $results_array = json_decode( $results, true );
    $return        = '';
    
    foreach( $results_array['params'] as $array ){
        $return .= $array['key'].'<br>';
        $return .= $array['value'].'<br>';  
    }
    

    这将输出以下内容:

    string(23) "1
    Yes
    2
    No
    "
    
        2
  •  0
  •   Shivanagesh    7 年前

    字符串是JSON

    {"params":{"1":{"key":"1","enabled":"1","value":"Yes"},"2":{"key":"2","enabled":"1","value":"No"}}}
    

    我们可以使用json_decode来覆盖对象,试试这个

    $results = $wpdb->get_var("SELECT options FROM wp_wpl_dbst WHERE table_column = '{$id}'");
    $parseme = json_decode($results);