PHP反序列化数组

时间:2012-04-18 10:41:42

标签: php arrays serialization

所以我正在处理顾客购物篮。我发现适合我的目的的最好方法是在数组中存储对象(具有每个项属性的设置属性)。所以我最终得到了一个ItemObject类型的对象数组。


我读了在MySQL表中存储这个对象数组的最好方法,就是序列化它,然后将它转换为字符串,然后存储它。然后当我需要它时,我可以用php函数反序列化()它。

我做到了这一点......现在我将它反序列化,我得到一个错误......代码跟随ItemObject和反序列化部分。如何将该字符串反序列化为ItemObjects类型的对象数组,以便我可以迭代并打印出每个项目的详细信息?

<?php
$dateSelected = $_GET['date'];
echo "Date: ".$dateSelected . "<br>";
mysql_connect();
mysql_select_db("dashjkd");
$result = mysql_query("SELECT order_object FROM orders WHERE orderDate = '".$dateSelected."'");
if(mysql_num_rows($result) > 0){
    $temp;
    while($row = mysql_fetch_assoc($result)){
        $temp = $row['order_object'];
        //print_r($temp);
    }
    echo "Array: <br>";

    $basketObjArray = array();
    $basketObjArray = unserialize($temp);
    print_r($basketObjArray);
    foreach($basketObjArray as $key => $value)
    {
        echo "Key: " . $key;
        echo "Value: ". $value;
    }

}else{
    echo "Something went horribly wrong..try again!";
}
?>

这种无法使用的代码导致了这个错误和奇怪的输出:

Date: 2012-04-18
Array:
Array ( [0] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => ItemObject [itemNameVar] => whitethoab [itemQtyVar] => 12 [itemPriceVar] => 10 ) [1] => stdClass Object ( [itemNameVar] => woolthoab [itemPriceVar] => 10 [itemQtyVar] => 2 ) [2] => stdClass Object ( [itemNameVar] => shemag [itemPriceVar] => 4 [itemQtyVar] => 1 ) [3] => stdClass Object ( [itemNameVar] => jacket [itemPriceVar] => 12 [itemQtyVar] => 2 ) ) Key: 0
Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in /home/sdsds/public_html/laundry/customerorder.php on line 21

我设计的itemObject非常简单并且在我尝试在序列化之前显示数组之前工作:

class ItemObject{
                            public $itemNameVar;
                            public $itemQtyVar;
                            public $itemPriceVar;

                        }

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

确保您尝试序列化/反序列化的课程具有__sleep__wakeup魔术功能。

在这些函数中,您可以定义如何序列化此类或其实例,以及如何使用序列化数据重新生成它们。例如,__ wakeup可用于为对象创建新的数据库连接,因为序列化之前的连接可能不再可用。

http://www.php.net/manual/en/language.oop5.magic.php#object.sleep

答案 1 :(得分:0)

  

我读了在MySQL表中存储这个对象数组的最佳方法

你在哪里读到的?有很多争论为什么这可能是存储数据的最差方式。

BTW,当您尝试反序列化范围内没有类定义的对象时,通常会发生此错误。