У меня есть сценарий, как это:Как я могу получить как исключения PDO, так и другие?
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
блок просто обращается к Exception
сек, что я набор. На самом деле мне также нужно получить доступ к исключению 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)
. Ну, есть ли какое-нибудь обходное решение?
Вы можете бросить экземпляр Exception PDO, и поймать блок только процесс PDOException. например, try {throw new PDOException («Нет вставленных строк»)} catch (PDOException $ e) {echo $ e-> getErrorMessage} –
'Exception' также поймает' PDOException', поскольку последний наследует от первого. – deceze
Я не уверен, что понимаю Q. Ваш блок catch уже настроен, чтобы поймать PDOException, если это произойдет, а также поймать вас. Они не будут возникать в одно и то же время, потому что для того, чтобы ваше исключение было брошено, операция PDO должна была завершиться без исключения исключения из своего собственного – BeetleJuice