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

时间:2018-08-08 23:17:42

标签: php sql wordpress serialization

我正忙于尝试从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 个答案:

答案 0 :(得分:1)

您显示的原始字符串不是序列化的字符串。序列化的字符串中包含密钥长度,如下所示: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
"

答案 1 :(得分:0)

字符串为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);