我在嘗試使用PHP反序列化數組時遇到了一些問題。序列化/反序列化PHP數組
我有一個類兩種方法,一種用於處理儲存在MySQL表的序列化陣列和一個進行檢索。
我執行第二方法時得到以下錯誤(檢索/反序列化時):
注意:反序列化():錯誤偏移量50647的50623字節/用戶/ benwaine /的NetBeansProjects/SentimentEngineMk2/lib中/TSE/Mapper/Filter.php第39行上
的字符串被存儲在MySQL INA blob字段。該數組是多維的,由一個帶有浮點數組的標記組成。問題是間歇性的,也許表明問題與令牌有關?
// Structure keywordA - 0.234 - 0.234 KeywordB - 0.23 - 0.47
// Methods public function insertFilterForKeyword($id, array $filterProbs) { $sql = "INSERT INTO filter (keyword_id, filter_probs, sample_size_pos, sample_size_neg) VALUE (:id, :filterProbs, :pos, :neg)"; $stmt = $this->pdo->prepare($sql); $meta = array_shift($filterProbs); $stmt->bindParam(':id', $id); $stmt->bindParam(':filterProbs',serialize($filterProbs)); $stmt->bindParam(':pos', $meta['sample_size_pos']); $stmt->bindParam(':neg', $meta['sample_size_neg']); $result = $stmt->execute(); return $result; } public function getFilterByKeyword($keyword) { $sql = 'SELECT f.id, f.keyword_id, f.filter_probs, f.sample_size_pos, f.sample_size_neg FROM filter f JOIN keyword k ON k.id = f.keyword_id WHERE k.keyword = :keyword'; $stmt = $this->pdo->prepare($sql); $stmt->bindParam(':keyword', $keyword); $result = $stmt->execute(); $data = $stmt->fetch(PDO::FETCH_ASSOC); $probArray = unserialize($data['filter_probs']); $filter = new TSE_Filter($probArray); return $filter; }
我猜誤差與數據中的字符所造成反序列化的問題做。
谷歌搜索後,我試過的方法通過以下方式反序列化線,其中沒有工作:
1)BASE64_ENCODE /解碼序列化的字符串。
//to safely serialize $safe_string_to_store = base64_encode(serialize($multidimensional_array)); //to unserialize... $array_restored_from_db = unserialize(base64_decode($encoded_serialized_string));
2)使用預浸比賽改變潛在的困難字符:
unserialize(preg_replace('/;n;/', ';N;', strtolower($data['filter_probs'])));
任何幫助,將不勝感激!
謝謝。
您可以發佈一個示例,說明當您從數據庫查詢序列化數據而不嘗試反序列化它時,它是什麼樣的? – 2011-04-24 00:49:52