2
class a {
  public function getContinents () {
    // connect to db
    $res = $this->db->query("SELECT continent FROM mytable");
    return $res;
  }
}

$obj = new a();
$getContinents = $obj->getContinents();

したがって、ここで変数 getContinents をチェックすると、有効な mysqli-result オブジェクトです

var_dump($getContinents);

結果は

object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(6) ["type"]=> int(0) }

今、このオブジェクトをシリアライズおよびアンシリアライズしたい

$getContinents_to_str = serialize($getContinents);
var_dump(unserialize($getContinents_to_str));

今の結果は

Warning: var_dump(): Property access is not allowed yet in ...

object(mysqli_result)#5 (5) { ["current_field"]=> NULL ["field_count"]=> NULL ["lengths"]=> NULL ["num_rows"]=> NULL ["type"]=> NULL }

なぜこれが起こったのか教えてください。どこが間違っていますか?

4

1 に答える 1

7
  1. mysqliクラスは、必ずしも独自のクラスと同じように動作するとは限らないクラスに組み込まれています。
  2. 通常、あらゆる種類のMySQL結果セットには、MySQLサーバーで現在開いているデータへの参照であるリソースが含まれています。このような外部リソースは現在有効であるため、シリアル化することはできませんが、後で有効になる可能性はありません。

つまり、MySQL結果セットリソースをシリアル化することはできません。

于 2012-11-04T09:08:58.850 に答える