【发布时间】:2012-04-18 10:41:41
【问题描述】:
所以我正在处理客户购物篮。我发现适合我的目的的最好方法是将对象(为每个项目属性设置属性)存储在一个数组中。所以我最终得到了一个 ItemObject 类型的对象数组。
我读到将这个对象数组存储在 MySQL 表中的最佳方法是将其序列化,从而将其转换为字符串,然后存储它。然后当我需要它时,我可以使用 php 函数 unserialize() 它。
我就是这样做的……现在我反序列化它,我得到一个错误……下面是 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;
}
感谢您的帮助:)
【问题讨论】:
-
只是确认一下,您的 ItemObject 定义对您的脚本可见吗?
-
这个问题可能会有所帮助:stackoverflow.com/questions/965611/…
-
伙伴感谢大开眼界...我做错了 foreach cnodition...我不得不让它成为 $basketObjArray 作为 $item 然后在正文中执行 $item->attribute(s)
标签: php arrays serialization