0

だから私は顧客の買い物かごを扱っています。私が目的に適していると判断した最善の方法は、オブジェクトを (各項目属性のプロパティを設定して) 配列に格納することでした。そのため、オブジェクト 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!";
}
?>

そして、この unserilization コードは、このエラーと奇妙な出力につながります:

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;

                        }

助けてくれてありがとう :)

4

2 に答える 2

0

このオブジェクトの配列をMySQLテーブルに格納するための最良の方法を読みました

どこで読んだの?これがおそらくデータを保存するための最悪の方法である理由はたくさんあります。

ところで、通常、このエラーは、スコープにクラス定義がないオブジェクトを逆シリアル化しようとしたときに発生します。

于 2012-04-18T11:39:56.970 に答える
0

シリアライズ/アンシリアライズしようとするクラスに__sleep__wakeupマジック関数の両方があることを確認してください。

これらの関数内で、このクラスまたはそのインスタンスをシリアル化する必要がある方法と、シリアル化されたデータでそれらを再初期化する方法を定義できます。たとえば、__wakeup を使用してオブジェクトの新しいデータベース接続を作成できます。これは、シリアライゼーション前の接続が使用できなくなる可能性が高いためです。

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

于 2012-04-18T10:51:00.383 に答える