2012-10-19 40 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。我已經能夠重現和最終解決普通用戶代碼的問題。