2011-04-09 54 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,同样的事情基本上。