在析构函数中调用PDO::exec()会挂起PHP进程
在测试环境类的析构函数中,我想删除测试数据库。在普通方法中执行此代码效果良好 将其放入析构函数(或使用在析构函数中调用PDO::exec()会挂起PHP进程,php,pdo,destructor,Php,Pdo,Destructor,在测试环境类的析构函数中,我想删除测试数据库。在普通方法中执行此代码效果良好 将其放入析构函数(或使用寄存器\u shutdown\u函数)也可以工作,但它会导致我的php进程永远无法完成。使用xdebug revails调查代码,echo'finished'从未到达 你知道为什么这会导致php进程挂起吗 public function __destruct() { $config = $this->getConfiguration(); if ($config['dbte
寄存器\u shutdown\u函数
)也可以工作,但它会导致我的php进程永远无法完成。使用xdebug revails调查代码,echo'finished'代码>从未到达
你知道为什么这会导致php进程挂起吗
public function __destruct()
{
$config = $this->getConfiguration();
if ($config['dbtests']['autogenerate'] && $config['dbtests']['cleanup'] ) {
/** @var \PDO $dbh */
$dbh = new \PDO('mysql:host=' . $config['database']['host'], $config['database']['user'], $config['database']['password']);
$dbh->exec('DROP DATABASE ' . $config['database']['dbname']);
echo 'finished';
}
}
如前所述,此代码来自我的测试环境类。这用于测试条令实体
我发现我必须手动关闭doctrineEntityManager
的db连接,然后才能打开与此db的其他连接。这可能是因为我正在删除EntitiyManager
连接所指向的数据库
该问题与自毁
或寄存器关闭功能
无关。我已经能够重现并最终解决普通用户代码的问题。如前所述,此代码来自我的测试环境类。这用于测试条令实体
我发现我必须手动关闭doctrineEntityManager
的db连接,然后才能打开与此db的其他连接。这可能是因为我正在删除EntitiyManager
连接所指向的数据库
该问题与自毁
或寄存器关闭功能
无关。我已经能够重现并最终解决普通用户代码的问题