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 回答