【问题标题】:Retrieve serialize value in the database wordpress在数据库 wordpress 中检索序列化值
【发布时间】:2014-12-17 10:52:57
【问题描述】:

我正在尝试在 wordpress 中查询数据库中的序列化数组值,值将存储在表 wp_postmeta 中的 meta_value 列中。
好吧,首先我使用 php 的 serialize() 函数存储了数组。
例如,

$postID = 1;
$arr = array(1, 2, 3);
$ser_val = serialize($arr);
update_meta_data($postID, '_customvalue', $ser_val);

存储的值是这样的

s:30:"a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}";

然后,当我尝试通过执行 wordpress sql 查询来检索它时。我期望它将是一个数组,因为它存储为数组,但这样做之后,它显示为字符串而不是数组。

    $get_score = $wpdb->get_row("SELECT meta_value FROM wp_postmeta WHERE meta_key = '_cummulativescore'");
    $scr = unserialize($get_score->meta_value);
    var_dump($scr);

    //output displayed
    //string(30) "a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}" 

我确实使用 is_array() 函数检查了值,结果是它不是数组
关于将序列化值作为数组获取的任何想法?

【问题讨论】:

    标签: php mysql arrays wordpress serialization


    【解决方案1】:

    看起来您的数据在序列化过程中被转换为字符串。

    数据应存储为

    a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}
    

    而不是

    s:30:"a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}"
    

    s:30 表示字符串长度为 30。

    【讨论】:

    • 那么你有什么建议?我应该在存储序列化数组时执行循环吗?
    • 不确定你的意思。我认为您的代码以某种方式对数组执行了两次序列化。检查 update_meta_data 函数是否可能已经在序列化,因此您可以跳过自己的序列化。
    • 嘿,你是对的。它正在执行两次序列化。现在应该解决它。谢谢
    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2012-05-15
    • 2015-07-22
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多