2011-12-23 49 views
12

我正在將數據保存在mysql數據庫中。該數據是一個數組,內容是登錄到我的系統的當前用戶的不同數據。從數據庫檢索序列化數組中斷

我這樣做時,我保存到數據庫:

$data = addslashes(serialize($array)); 

然後

"UPDATE or INSERT INTO TABLE SET ... data = '$data';" 

現在,數據是否正確,因爲從我的PHP代碼插入或更新語句返回有效的保存。

我的問題是,當我試圖un-serialize它,它返回false,並在我的頁面顯示通知。

我在做什麼錯?

+0

您可以發佈您使用的代碼來反序列化數據和您正在獲取的錯誤。 – Nonym 2011-12-23 03:17:23

+0

通知說什麼? – 2011-12-23 03:17:52

回答

23

我會打賭您的mysql數據庫中的字段不夠大,無法保存所有字符。這就是爲什麼當你將其序列化時,你會得到一個通知,並且沒有任何回報。

嘗試增加字段或LONGBLOBLONGTEXT一個MEDIUMBLOBMEDIUMTEXT(16,777,215最大長度)的(4,294,967,295最大長度)是這樣的:

ALTER TABLE your_table MODIFY COLUMN column_name MEDIUMTEXT /* other properties*/; 

並嘗試保存和重新讀取數據。

現在,如果你的數據超過了4,294,967,295(這是LONGBLOB或LONGTEXT),也許你應該檢查你保存的數據類型,也許過濾或刪除不需要的數據。

0

從表中獲取數據後,是否在unserialize函數之前刪除了斜槓。

試着在沒有addslashes()的情況下插入,並在將其帶入數組之前添加斜線。