从数据库反序列化序列化字符串时出现错误消息的原因?

时间:2016-07-26 06:14:41

标签: php

好吧,我有以下数组和变量,它的输出如下:

`print_r($menu_ex_qnt);`

Array
(
    [0] => 1
    [1] => 2
)


print_r($menu_extra_item_name);

Array
(
    [0] => 238
    [1] => 239
)

$final_ex = array_combine($menu_ex_name, $menu_ex_qnt);        
print_r($final_ex);

Array
(
    [238] => 1
    [239] => 2
)

echo $final_ex = serialize($final_ex);

a:2:{i:238;s:1:"1";i:239;s:1:"2";}

现在,我将此$final_ex变量插入数据库。

但是当我从数据库中获取此变量并尝试unserialize时,它会显示以下错误消息:

echo unserialize($p_ext_items);
Note : This $p_ext_items contain the serialize string e.g: a:2:{i:238;s:1:"3";i:239;s:1:"1";}

Notice: unserialize(): Error at offset 11 of 54 bytes .......

为什么?

我真正想要的是什么

有两个变量$menu_ex_qnt$menu_extra_item_name。我想将这两个变量value 而不是 key保存到数据库中。因此,在最终变量中,将有keyvalue对。

例如:

238 => 1
239 => 2

1 个答案:

答案 0 :(得分:1)

由于您说$p_ext_items包含序列化字符串,因此: - a:2:{i:238;s:1:"1";i:239;s:1:"2";}

你做了: -

$p_ext_items = htmlspecialchars($result['p_ext_items']);
echo unserialize($p_ext_items);

你必须删除第一行,在这种情况下不需要,所以只需要做: -

print_r(unserialize($p_ext_items)); // it will give array so use print_r

注意: - 您的工作示例: - https://eval.in/611959