【发布时间】:2016-11-15 12:17:39
【问题描述】:
我有一个这样的脚本:
try {
$stm = $dbh->prepare("INSERT .. SELECT query");
$stm->execute();
if ( $stm->rowCount() > 0 ) {
echo 'inserted';
} else {
throw new Exception('No rows inserted');
}
} catch(Exception $e) {
echo $e;
}
如您所见,catch 块仅访问我设置的 Exceptions。实际上我还需要访问 PDO 异常。像这样的:
} catch(Exception $e, PDOException $pdo) {
echo isset($pdo) ? "other message: " . $e : null;
echo isset($e) ? "PDO message: " . $pdo : null;
}
如你所知,我目前的语法是错误的。我说的是catch(Exception $e, PDOException $pdo)。那么有什么解决方法吗?
【问题讨论】:
-
你可以抛出一个 PDO Exception 实例,并且在 catch 块中只处理 PDOException。比如 try { throw new PDOException('No rows inserted')} catch (PDOException $e) { echo $e->getErrorMessage }
-
Exception也会捕获PDOException,因为后者继承自前者。 -
我不确定我是否理解 Q。您的 catch 块已经设置为在 PDOException 发生时捕获它,并捕获您的。它们不会同时发生,因为要引发您的异常,PDO 操作必须已完成而没有引发它自己的异常
标签: php pdo exception-handling try-catch