過去5個小時一直在這裏,我很難過。嘗試了最荒謬的功能來嘗試修復它,但無濟於事。反序列化數據不起作用
我正在從WP數據庫檢索數據。在插入之前,數據具有使用PHP的serialize()
函數序列化的1個數組。然後使用WP功能update_user_meta
將其插入WP數據庫。 This function的參考說:
$meta_value
(mixed) (required) The new desired value of the meta_key, which must be different from the
existing value. Arrays and objects will be automatically serialized.
Note that using objects may cause this bug to popup.
Default: None
這使我想到數據可能已被序列化兩次。雖然通過了一大堆的功能,如unserialize()
,array_map
,json_decode
去,以及它們的組合,更我現在已經得到了如下:
$i = 0;
while($i < count($fbData)){
$someValue = $fbData[$i]['meta_value'];
$usermeta = array_map(function($a){ return $a[0]; }, get_user_meta($fbData[$i]['user_id']));
if($usermeta['facebookmeta']){
$unserialized = unserialize($usermeta['facebookmeta']);
//other methods tried: unserialize(unserialize
// unserialize(json_decode(
// json_decode(unserialize(json_decode(
// json_decode(unserialize(
// unserialize(array_map(
// unserialize(array_map(json_decode
// whole lot others
var_dump($unserialized);
}
$i++;
}
然而,這是行不通的。這正好與$fbData
:
'facebookmeta' => string 's:668:"a:16:{s:2:"id";s:9:"123456";s:4:"name";s:12:"Henkie";s:10:"first_name";s:4 //and so on
這是結果:
string 'a:16:{s:2:"id";s:9:"123456";s:4:"name";s:12:"Henkie";s:10:"first_name";s:4: //and so on
由於可見它的結果,它只是刪除了從一開始,這表明「s:668:"
」這是一個668字符串,並保持其餘部分不變。
非序列化如何正常工作?
是的我想,但是反序列化兩次沒有給我什麼回報。另外,處理預先創建的數據,太遲以至於無法改變這一點。 – Nukeface 2013-04-29 14:35:41
嘗試在http://jsonlint.com/驗證字符串爲JSON並查看它告訴你什麼? – diggy 2013-04-29 14:51:34
有趣的網站;)不過,它並不認爲它是JSON。完全開放的想法,但真的不想手動重新創建10.000+記錄。 – Nukeface 2013-04-29 14:56:09