2013-07-01 55 views
0

有在WordPress的post_meta陣列的一些問題,在數據庫中其發送錯誤信息,所以我想改變的數據庫update_post_meta結果現在我用下面的帖子元:變更結果

update_post_meta($post_id, '_wpsc_vendors', array(19,'enabled',true,rate,30)); 

其產生這-元后鍵和值:

key: _wpsc_vendors 
value: a:5:{i:0;i:19;i:1;s:7:"enabled";i:2;b:1;i:3;s:4:"rate";i:4;i:30;} 

現在我想在數據庫中更改結果值過這樣的:

a:1:{i:19;a:2:{s:7:"enabled";s:4:"true";s:4:"rate";s:2:"30";}} 
+0

我不太確定。你想直接在數據庫中改變它,或者你想用不同的參數再次調用update_post_meta? – leticia

+0

update_post_meta再次使用不同的參數,所以結果將是:1:{i:19; a:2:{s:7:「enabled」; s:4:「true」; s:4:「rate」; s: 2:「30」;}} – Corlax

回答

3

數據:

array(19,'enabled',true,rate,30) 

serialized由WordPress變換到如下:

a:5:{i:0;i:19;i:1;s:7:"enabled";i:2;b:1;i:3;s:4:"rate";i:4;i:30;} 

含義:

一個:5:是5數組商品

i:0; i:19;是索引爲0「i:0」的第一個元素,值整數19

i:1; s:7:「enabled」;如果 「啓用」

...等等

索引1,串用7個字符元素

你想要的序列化的價值似乎並不有效:

一:1:{I :19; a:2:{s:7:「enabled」; s:4:「true」; s:4:「rate」; s:2:「30」;}}

也許這樣會有幫助你(用序列化PHP函數進行測試):

$b = array('19'=>array("enabled","true","rate","30")); 
echo serialize($b); 

// Prints: 
a:1:{i:19;a:4:{i:0;s:7:"enabled";i:1;s:4:"true";i:2;s:4:"rate";i:3;s:2:"30";}} 

如果你想存儲/直接更新值表中,你可以做如下:

global $wpdb; 
$sql = "UPDATE $wpdb->postmeta SET meta_value = '$meta_value' WHERE meta_key = '_wpsc_vendors' AND post_id = $post_id"; 
$wpdb->query($sql); 

但是我不推薦店手工修改數據被認爲是序列化,或者直接保存到postmeta表而不是使用update_post_meta函數。

+0

可能應該有辦法做到這一點http://stackoverflow.com/questions/2746589/how-to-create-an-array-from-database請檢查 – Corlax

+0

有沒有什麼辦法刪除我:0,我:1,我:2,我:3 – Corlax

+0

你也可以從該值也獲得一個數組,使用反序列化http://php.net/manual/en/function.unserialize.php – leticia