gpt4 book ai didi

php - 错误类未捕获引发的错误

转载 作者:行者123 更新时间:2023-12-03 08:56:30 25 4
gpt4 key购买 nike

我有一个看起来像这样的异常类

<?php
class Errors{
public function displayError(Exception $e){
$trace = $e->getTrace();
if($trace[0]['class'] != ""){
$class = $trace[0]['class'];
$method = $trace[0]['function'];
$file = $trace[0]['file'];
$line = $trace[0]['line'];
$error_message = $e->getMessage().
"<br /> Class/Method : ".$class." <==> ".$method.
"<br /> File : ".$file.
"<br /> Line : ".$line;
}
return $error_message;
}
}
?>

对于由于错别字/列数与值计数不匹配而引发的许多错误,此方法效果很好,但是当我自己从代码中引发异常时,我得到一个错误。例如
  try{
$stmt = $db->dbh->prepare("SELECT user FROM reset ");
$stmt->execute();
if ($stmt->rowCount() < 1){
throw new Exception('The Link expired, request a new one');
} else {
throw new Exception('The Link is invalid, please request a new one');
}
}
catch (PDOException $e) {
$error = new Errors();
echo "<b>".$error->displayError($e)."</b>";
}

运行代码时出现 Uncaught exception 'Exception' with message 'The Link is invalid, please request a new one'错误。如果我删除该行,并通过将 SELECT拼写为 SLECT来引发错误,则错误类可以正常工作。

如何使错误类捕获所有类型的错误?

最佳答案

问题是NOT all exceptions are PDOExceptions。您只编码PDOException,这意味着new Exception将不会被捕获。尝试:

try
{
$stmt = $db->dbh->prepare("SELECT user FROM reset ");
...
}
catch (PDOException $e)
{
$error = new Errors();
echo "<b>".$error->displayError($e)."</b>";
}
catch (Exception $e)
{
$error = new Errors();
echo "<b>".$error->displayError($e)."</b>";
}

SELECT拼写为 SLECT时代码起作用的原因是,您触发了 PDOException而不是 new Exception

关于php - 错误类未捕获引发的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com