在我的测试环境类的析构函数中,我想删除测试数据库。在普通方法中执行此代码可以正常工作。
将它放入析构函数(或使用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';
}
}
答案 0 :(得分:1)
如上所述,此代码来自我的测试环境类。这用于测试学说实体。
我发现在打开与此db的其他连接之前,我必须mannualy关闭doctrine EntityManager
的db连接。这可能是因为我正在删除EntitiyManager
的连接所指向的数据库。
问题不适用于__destruct
或register_shutdown_function
。我已经能够重现并最终解决普通用户代码的问题。