我在尝试使用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