2011-05-05 27 views
1

O.K.所以我很聰明 - 我已經建立了一個庫,可以保留一大堆WP主題,這些WP主題都是根據我的需要設置的,所以當我推出新網站時,我可以在幾分鐘內創建新博客。PHP序列化數據庫條目搞砸了我所有

作爲新域的持有者,我在sql文件中擁有舊域的所有內容都用[token]替換。

一切工作正常,直到我做了一個與兒童主題,顯然序列化數據之前輸入到數據庫中的一個點。結束了這樣的東西:

Theme','a:8:{s:12:\"header_image\";s:92:\"http://[token]wp-content/uploads/2011/05/494-Caring-for-fruit-trees-PLR.jpg\";s:16:\"background_image 

所以我挖成系列化,它turnss的是S:92位例如是該值的字符數。由於我正在更改[標記],它會更改並中斷。

到目前爲止,我對sql文件做了所有更改,除了使用sql文件填充數據庫之外,沒有編輯數據庫 - 但是我很遺憾如何處理串行數據陣列。

任何想法?

回答

1

最簡單的方法是抓住這些數據,並使用unserialize()功能,如

$arr = unserialize($data); 

然後編輯該數據的方式。完成後,使用serialize()重新序列化,並將其存回。您可能必須對未經過序列化的數據執行print_r()以查看其存儲方式以瞭解您需要編輯的內容。

如果您直接從序列化數據中進行更改,則必須獲取當前子字符串的長度,進行更改,然後獲取新長度並將它們拼接回序列化數據中,這樣更加方便比它需要的複雜。

+0

這就是我認爲我必須做的事情,這使得它非常複雜,因爲有很多行。顯然,每個職位一個。 – 2011-05-05 21:09:12

+0

您可以嘗試獲取序列化的總長度,替換該令牌,然後重新獲取長度。從新長度減去舊的長度以獲得總變化,然後將適當的整數修改爲整數值加上變化。這只是容易出錯。最簡單的方法是準備MySQL語句,然後將數組設置爲搜索參數,然後循環執行每個查詢,並根據需要進行替換。 – shmeeps 2011-05-05 21:14:56

+0

您應該反序列化,更改數據並將其序列化。你必須忍受這樣一個事實,即你需要通讀print_r()輸出來查看在更改值之前數組是如何構建的。順便說一句。它的反序列化(),而不是unserailize():-) – 2011-05-05 21:32:49