【问题标题】:pthreads v3 / PHP 7 / PDOException: You cannot serialize or unserialize PDO instancespthreads v3 / PHP 7 / PDOException:您无法序列化或反序列化 PDO 实例
【发布时间】:2016-06-06 13:59:44
【问题描述】:

我正在使用 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 ...


    }

}

【问题讨论】:

    标签: php multithreading serialization pdo pthreads


    【解决方案1】:

    经过几个小时的尝试,我发现了错误。

    错误是,我调用了 $this->db,即使这个属性在类中甚至不存在:

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

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

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

    也许有人也浪费了几个小时来寻找这个小错误,我可以帮助这篇文章:)

    【讨论】:

      猜你喜欢
      • 2012-01-31
      • 2012-06-11
      • 2011-05-27
      • 2017-09-10
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多