2012-10-19 112 views
1

在我的测试环境类的析构函数中,我希望删除测试数据库。在一个普通的方法中执行这个代码工作正常。在析构函数中调用PDO :: exec()会挂起PHP进程

把它放入析构函数(或使用register_shutdown_function)也可以,但它会导致我的php过程永远不会结束。使用xdebug调查代码的结果是,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'; 
    } 
} 

回答

1

如上所述,此代码来自我的测试环境类。这用于测试学说实体。

我发现我必须mannualy关闭数据库连接的教条EntityManager之前打开其他连接到这个数据库。这很可能是因为我删除了连接EntitiyManager指向的db。

该问题不是__destructregister_shutdown_function。我已经能够重现和最终解决普通用户代码的问题。