pthreads v3 / PHP 7 / PDOException:您无法序列化或反序列化PDO实例

时间:2016-06-06 13:59:45

标签: php multithreading serialization pdo pthreads

我正在使用PHP 7的pthreads v3扩展,我有 WORKER类以及 JOB类

我在下面使用的代码应该适用于旧版本,因为我看到很多人使用它。但现在它已不复存在了。

我的目标是在 JOB类中使用PDO数据库连接。我尝试了很多东西,除了使用MySQLi扩展外似乎没什么用,但我不想使用它。

所以我的问题是:如何在没有上面提到的致命错误的情况下为每个 JOB类创建一个PDO连接?

我在网上多次看到这段代码作为错误的解决方案:

“致命错误:未捕获PDOException:您无法在...中序列化或反序列化PDO实例。

class MyWorker extends Worker{


    public static $pdo;


    public function __construct() {
        $this->hostname = DBHOST;
        $this->username = DBUSER;
        $this->password = DBPASS;
        $this->database = DBNAME;
    }


    public function run() {

            self::$pdo = new PDO(
                "mysql:host=".$this->hostname.";port=3306;dbname=".$this->database, $this->username, $this->password);
    }



    public function getConnection() {

        return self::$pdo;

    }


}








class Job extends Threaded
{


    public function run()
    {

        $this->db = $this->worker->getConnection();  // HERE IS THE ERROR!

        // code, that connects to database ...


    }

}

1 个答案:

答案 0 :(得分:0)

几个小时后尝试了一切,我发现了错误。

错误是,我称之为 $ this-> db ,即使该类中甚至不存在此属性:

$this->db = $this->worker->getConnection();

相反,您只需声明一个新变量,例如 $ db

$db = $this->worker->getConnection();

也许有人会花几个小时寻找这个小错误,我可以帮忙解决这个问题:)