2011-02-11 125 views
0

我在反序列化数据库表中的数据时遇到了问题。我将这些数据序列化并保存到表格中。当我检索数据时,我无法正确地得到它。以下是我的代码。反序列化问题

$miscel = serialize(array($_POST['Prod_Price'],$_POST['Prod_Cond'])); 

我成功地将数据插入数据库。在数据库表中,它看起来像

s:38:"a:2:{i:0;s:4:"4444";i:1;s:6:"Middle";} 

我怎样才能正确地检索数据?

+0

什么是你的问题,更具体?你打电话反序列化你的字符串? – alexn 2011-02-11 11:00:14

+0

我将数据序列化并放入mysql表中。但我不知道如何检索。我尝试了反序列化,但它不起作用。 – Arung 2011-02-11 11:03:02

+0

您是否在谈论如何从数据库检索数据? – 2011-02-11 11:08:15

回答

3

究竟是什么问题?你应该能够简单地调用unserialize()在其原来的形式来检索数据:

// assuming your database column 'foo' contains 
// s:38:"a:2:{i:0;s:4:"4444";i:1;s:6:"Middle";} 
$miscel = unserialize($row['foo']); 
print_r($miscel);  
// returns array([0] => 4444, [1] => 'Middle'); 

如果问题在于一个事实,即处于序列化数据不是很可读内,你应该考虑存储阵列键以及

$miscel = serialize(array('price' => $_POST['Prod_Price'], 'cond' => $_POST['Prod_Cond'])); 
0

您需要使用unserialize FUNC灰。这将每一个返回到一个数组中。

0
$records = array(
      'name'=>'abc', 
      'mobile'=>'1234566789', 
      'address'=>'test', 
      'email'=>'[email protected]'); 
$records_serialize = serialize($records); 

echo "serialize<br/>"; 
print_r($records_serialize); 

echo "<br/><br/>unserialize<br/>"; 
$records_unserialize = unserialize($records_serialize); 
print_r($records_unserialize); 

下面的代码使用序列化和反序列化

输出

serialize 
a:4:{s:4:"name";s:3:"abc";s:6:"mobile";s:13:"1234566789";s:7:"address";s:4:"test";s:5:"email";s:13:"[email protected]";} 

unserialize 
Array ([name] => abc [mobile] => 1234566789[address] => test [email] => [email protected])