2013-06-02 77 views
1

我正在類構造函數內創建新的PDO連接,然後僅在該類中使用它。如果發生一些錯誤,我會得到致命錯誤,而不是PDOException在其他範圍內使用PDOException可能嗎?

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not fou.....

我的代碼是:

class Helper 
{ 
    private $_db; 

    function __construct($config = FALSE) 
    { 

     $this->_db = new PDO($config['database']['dsn'], $config['database']['username'], $config['database']['password'], $config['database']['options']); 
     $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
} 

$config = array(
    'database' => array(
     'dsn' => 'mysql:host='.$dbhost.';dbname='.$dbname, 
     'username' => $dblogin, 
     'password' => $dbpass, 
     'options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
     ) 
    ) 
); 

try { 
    $helper = new Helper($config); 
} catch (PDOException $error) { 
    die('Database Error: ' . $error->getMessage()); 
} 

那麼,這可能嗎?

+0

它應該是可能的。 PDO正在利用該功能(其中包括)來推廣自己。 – 11684

+0

@ 11684但正如我所說 - 我只得到致命錯誤 – Kin

+0

也許它與你自己並沒有調用'__construct()'方法有關。如果將代碼從構造函數移動到實例方法(例如'foo'),然後在try-block中執行此操作,會發生什麼情況:'$ helper = new Helper(); $ helper-> FOO($配置)'。 – 11684

回答

2

So is it possible ?

當然。這實際上就是Exceptions的目的。

i get fatal error instead of PDOException.

這並不完全正確。你實際上得到了一個異常,雖然沒有被捕獲(反過來,這導致了致命的錯誤)。

關於你當前的錯誤 - 很可能是由其他代碼塊造成的。總是有一個異常提供的堆棧跟蹤 - 所以,你可以很容易地找到它。那麼你可能會在那裏抓到它。

但是,我會建議不要手動捕捉它。最好創建一個異常處理程序,並在一個地方捕獲所有的異常(除非你想以某種方式處理錯誤,這很少發生)

+0

問題是我定義了異常,但它引發了未定義的'未捕獲的異常'PDOException'' – Kin

+0

所以我需要修復它,並捕獲該異常 – Kin

+0

嗯 - 只是抓住它。順便說一句,你爲什麼想要它? PDO錯誤很少被捕獲。 –

相關問題