2016-07-27 105 views
3

我有一些命令信息存儲在名爲「order_details」的數據庫錶行中。從什麼研究,我到目前爲止已經完成,細胞含有一個序列化數組:反序列化數據

s:346:"{"total":50,"tax_perc":8.25,"shipping_total":20,"discount_total":0,"discount":"","pick_up":0,"items":[{"id":"0","amount":1,"available":1000,"price":50,"first_pet":50,"pet_count":1,"size":"4x6","type":"portrait","clothe":"93","total":50}],"size_found":false,"taxes_total":4.13,"grand_total":74.13}"; 

我嘗試使用反序列化(),但沒有打印任何東西。將它保留序列化至少打印單元格的內容。

當我使用unserialize()時爲什麼沒有打印任何想法?我試圖創建一個後端接口使用這個數據,所以鑑於unserialize()將組織這些數據,我需要能夠只顯示一個特定的元素(如ID)。那可能嗎?還是必須打印所有這些數據?

UPDATE 下面是我迄今爲止的工作原理: (1)當有人下訂單,該數據被串行化扔進數據庫和電子郵件被髮送給我和客戶 (2)這個管理頁面,我想要求和顯示所說的序列化數據,我查詢數據庫返回相關的表按ID編號 (3)然後,我有這個,這是爲了把這些數據扔到用戶界面上的錶行。

$mydata = $all_orders[$i]['order_details']; 
$mydata = unserialize($mydata); 
echo '<td>' . $mydata . '</td>'; 

在這一點上,我只是想在這些數據上獲得更好的視覺效果。我也希望能夠在價格,身份證等方面對錶格進行排序。

在此先感謝您的回覆!

+2

您是如何反序列化數據的?顯示代碼!因爲看起來好像你序列化了一些json –

+0

'unserialize()'在失敗時返回布爾值FALSE,這將打印/回顯爲零長度字符串(例如不可見)。你需要'var_dump()'來代替。 –

+0

@MarkBaker我更新了問題以顯示一些代碼。讓我知道你是否需要看更多。 – coatandtails

回答

2

數據庫中的字符串已被JSON編碼爲字符串,然後進行序列化。這就是爲什麼序列化字符串中的第一個字符是「s」(s的意思是任何後面的字符串,在你的情況下,長度爲346個字符)。

unserialize()返回的原因false是因爲已經序列化的字符串包含未轉義的雙引號。當unserialize()運行時,它會失敗,因爲它使用前兩組雙引號確定要反序列化的字符串。在你的情況下,反序列化()正試圖反序列化下面的字符串:

s:346:"{" 

這將導致失敗,因爲兩組雙引號之間的字符串的長度不是346個字符。

你不應該需要序列化已經被JSON編碼的東西。選擇其中一種編碼選項(JSON編碼或序列化),但不能同時使用這兩種編碼選項,並堅持使用您選擇的編碼選項。

+0

謝謝大衛!我會給它一個鏡頭。 – coatandtails