2012-11-04 72 views
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,结果对象序列化,然后反序列化的MySQL结果对象

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 } 

请告诉我为什么发生这种情况?它错在哪里?

回答

7
  1. mysqli类的构建类不一定与您自己的类相同。
  2. 任何类型的MySQL结果集通常是或包含资源,即对当前在MySQL服务器上打开的数据的引用。你不能序列化这些外部资源,因为它们现在只是有效的,但可能不会晚。

简而言之:你不能序列化MySQL结果集资源。