2016-07-27 53 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