2011-03-03 77 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格式。