我第一次在PHP中遇到try, throw catch语句,我觉得这可能是处理错误的更好方式,因为我用很多if else语句弄乱了我的错误处理程序,然而,当我在脚本上执行CRUD操作时,我希望我的错误处理程序执行两个任务。
- 显示用户可读或自定义错误消息返回用户。
- 捕获文件中的所有错误
我正在使用下面的代码…
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 == $name为真,我只是想显示错误'对不起,请将值更改为更新,但这不是发生在这里,而是抛出致命错误与此消息。
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
我如何做到这一点?
谢谢. .
你抓的是一只PDOException
:
catch(PDOException $e)
当你扔一个Exception
时:
throw new Exception('Sorry, P...
PDOException
是Exception
的子类,这意味着:
-
PDOException
是Exception
- 但是
Exception
不是PDOException
。
因此,当您试图捕获PDOException
时,您的catch
也不会捕获Exception
。
如果你想要你的Exception
被捕获,你必须使用这样的东西:
try {
}
catch (PDOException $e) {
// deal with PDOException
}
catch (Exception $e) {
// deal with all other kinds of exceptions
}
在这种情况下,catch
PDOException
可以避免,如果你不想对PDOException
s做一些特殊处理,只是希望所有异常都以同样的方式处理:
try {
}
catch (Exception $e) {
// deal with all kinds of exceptions
}
你抛出了一个Exception
,但是抓住了一个PDOException
。
你应该捕获和你抛出的一样,所以你可能想把你的捕获改为:
catch(Exception $e)
或者,如果您也想捕获PDOException
而不为自己的异常执行file_put_contents
,则为特定的Exception
添加catch
。
你当然也可以把你的throw改为PDOException
,基本上是一样的。