所以我写这个网站要求我制作用户类,我需要从数据库中获取一些数据但是当我尝试$this->conn = new PDO(....)
时,它会抛出致命的错误,如下所示
致命错误:未捕获的异常' PDOException'有消息'您无法序列化或反序列化PDO实例'在[无活动文件]中:0堆栈跟踪:#0 [内部功能]:PDO-> __ sleep()#1 {main}在第0行的[无活动文件]中抛出
班级用户:
private $idu = -1;
private $display_name = "";
private $permissions = [];
private $conn = "";
/**
* User constructor.
*/
function __construct($idu)
{
$this->conn = new PDO("mysql:host=localhost;dbname=lai","lai","lai");
$this->conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->idu = $idu;
$this->setDisplayName($idu);
}
//GETS DISPLAY NAME FROM DB FOR CURRENT USER
private function setDisplayName($idu){
//$sql = "SELECT `display_name` FROM `users` WHERE `idu`='".$idu."'";
//$q = $this->conn->prepare($sql);
//$q->execute();
//$result = $q->fetch(PDO::FETCH_ASSOC);
//return $result['display_name'];
}
//GETS PERMISSIONS FROM DB FOR CURRENT USER
private function setPermissions($idu){
}
//RETURNS ID OF CURRENT USER
public function getIDU(){
return $this->idu;
}
//RETURNS DISPLAY NAME FOR CURRENT NAME
public function getDisplayName(){
return $this->display_name;
}
//RETURNS PERMISSIONS FOR CURRENT USER
public function getPermissions(){
return $this->permissions;
}
我不需要在课堂上存储连接,但需要能够在班上使用DB,我也尝试过声明
$conn = new PDO(....);
在课堂之外,在全球范围内,它也没有工作
答案 0 :(得分:0)
您将该用户实例存储在某个地方,例如在会话中?
PHP希望在代码中的某个地方序列化该类,以及所有字段,甚至是$ conn字段。 为了在会话中存储整个用户实例,您应该:
在User类中编写一个__wakeup方法,该方法返回要序列化的属性数组:
public function __wakeup(){ 返回[" idu"," display_name"," permissions"]; //没有$ conn在这里! } 这样它就不会尝试序列化连接资源。