2011-04-09 52 views
0

我第一次遇到try,在PHP中拋出catch語句,並且我覺得這可能是更好的處理錯誤的方法,因爲我很亂我的錯誤處理程序很多if else語句,但是由於我正在對腳本執行CRUD操作,因此我希望我的錯誤處理程序執行兩項任務。使用嘗試的問題,拋出PHP處理錯誤

  1. 顯示用戶可讀或 定製錯誤消息發送回用戶 。
  2. 捕獲文件中的所有錯誤 我要閱讀。

我用下面的代碼..

try 
{ 
    $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); 
    if($cname == $name) 
    { 
     throw new Exception('Sorry, Please Change the value to update '); 
    } 
    $sth = $dbh->prepare("UPDATE countries SET name = :name WHERE id = :cid"); 
    $sth->bindParam(':name', $name); 
    $sth->bindParam(':cid', $cid); 
    $sth->execute(); 
} 
catch(PDOException $e) 
{ 
    echo $e->getMessage(); 
    file_put_contents("resources/logs/Connection-log.txt", DATE.PHP_EOL.$e->getMessage().PHP_EOL.PHP_EOL, FILE_APPEND); 
} 

如果條件$ CNAME == $的名字是真的,我只是想顯示錯誤「對不起,請更改爲更新的價值,但是這不會發生在這裏,而是會引發此消息的致命錯誤。

Fatal error: Uncaught exception 'Exception' with message 'Sorry, Please Change the value to update ' in /Applications/MAMP/htdocs/kokaris/administrator/resources/library/models/countries.php:24 Stack trace: #0 /Applications/MAMP/htdocs/kokaris/administrator/location-manager.php(43): include() #1 {main} thrown in /Applications/MAMP/htdocs/kokaris/administrator/resources/library/models/countries.php on line 24 

我該如何做到這一點?

謝謝你..

回答

3

你抓正趕上一個PDOException

catch(PDOException $e) 

當你拋出一個Exception

throw new Exception('Sorry, P... 


PDOException是一個子類的Exception,這意味着:

  • A PDOExceptionException
  • 但是Exception不是PDOException

所以,當你正試圖趕上PDOException,你catch不會也搭上Exception


如果你希望你的Exception被逮住,你必須使用這樣的事情:

try { 

} 
catch (PDOException $e) { 
    // deal with PDOException 
} 
catch (Exception $e) { 
    // deal with all other kinds of exceptions 
} 


在這種情況下,catchPDOException是可以避免的,如果你不想做一些PDOException s的特殊處理,只是希望以同樣的方式處理所有異常:

try { 

} 
catch (Exception $e) { 
    // deal with all kinds of exceptions 
} 
+0

不錯:),這麼簡單和容易聯合國derstand,非常感謝你.. – 2011-04-09 11:44:05

+0

不客氣:-) – 2011-04-09 11:44:41

1

你拋出一個Exception但受涼PDOException

你應該抓住一樣的,你扔了,所以你可能希望將捕獲更改爲:

catch(Exception $e) 

或者,如果你也想趕上那PDOException併爲自己的錯誤時拋出不做file_put_contents,加一個catch爲您的具體Exception

你可以當然也改變你的投擲PDOException,同樣的事情基本上。