2011-03-03 100 views
3

我正在使用分类脚本并将user_meta数据保存在wp_usermeta表中。 的meta_key场被称为user_address_info和它有所有的数据象下面这样:从mySQL反序列化值

s:204:"a:7:{s:9:"user_add1";s:10:"my address";s:9:"user_add2";N;s:9:"user_city";s:7:"my city";s:10:"user_state";s:8:"my phone";s:12:"user_country";N;s:15:"user_postalcode";s:10:"comp phone";s:10:"user_phone";N;}"; 

我没有使用上的脚本,但user_add1,user_city,USER_STATE和user_postalcode

所有字段我有

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A); 

我想一些帮助,在这里,让我在任何地方显示(我使用任何类型的SQL查询不介意)所要求的信息如:麻烦使用SQL像下面的例子(WordPress的)来获取数据当前作者ID的user_city(如25)

我得到了下面的例子,但我想要的东西动态

<?php 
$s = 's:204:"a:7:{s:9:"user_add1";s:10:"my address";s:9:"user_add2";N;s:9:"user_city";s:7:"my city";s:10:"user_state";s:8:"my phone";s:12:"user_country";N;s:15:"user_postalcode";s:10:"comp phone";s:10:"user_phone";N;}"'; 
$u = unserialize($s); 
$u2 = unserialize($u); 
foreach ($u2 as $key => $value) { 
    echo "<br />$key == $value"; 
} 
?> 

非常感谢你。

回答

5

不,您不能使用SQL来反序列化。
这就是为什么在一个数据库中存储序列化的数据是一个非常糟糕的主意

两次糟糕做连载两次。

所以,你一无所有,但使用你给的代码。
虽然我看不到太多的静态。
你遇到过任何问题吗?
或者你只是想解决一些问题,但不知道需要解决什么问题?摆脱序列化然后

0

我发现存储到数据库的序列化值被转换为其他格式。由于serialize数据存储引号,分号,culry括号,mysql需要自行保存,所以它会自动放入来自gpc_magic_quotes(CMIIW)的“backslash()”。所以如果你存储了一个序列化数据并且你想使用它,那么在接口中你应该使用html_entity_decode()来确保你有PHP读取的实际格式。

这里是我的示例:

$ser = $data->serialization; // assume it is the serialization data from database 
$arr_ser = unserialize(html_entity_decode($ser)); 

注:我尝试它和它的作品,并确保避免这种类型的存储在表(到危险)。这种方式也可以解决表中存储的json格式。