Ich habe ein Skript wie folgt:Wie kann ich beide PDO-Ausnahmen und die anderen erhalten?
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;
}
Wie Sie sehen, dass catch
Block Exception
s gerade zugreift, die ich festgelegt haben. Eigentlich muss ich auch auf die PDO-Ausnahme zugreifen. Etwas wie dieses:
} catch(Exception $e, PDOException $pdo) {
echo isset($pdo) ? "other message: " . $e : null;
echo isset($e) ? "PDO message: " . $pdo : null;
}
Wie Sie wissen, ist meine gegenwärtige Syntax falsch. Ich spreche über catch(Exception $e, PDOException $pdo)
. Nun, gibt es einen Workaround?
Sie eine PDO Exception-Instanz werfen kann, und in catch-Block Nur PDOException verarbeiten. wie try {neue PDOException werfen ('No rows inserted')} catch (PDOException $ e) {echo $ e-> getErrorMessage} –
'Exception' fängt auch' PDOException' ab, da letzterer von ersterem erbt. – deceze
Ich bin mir nicht sicher, ob ich das Q verstehe. Ihr catch-Block ist bereits eingerichtet, um eine PDOException zu erfassen, wenn sie auftritt, und auch Ihre zu fangen. Sie würden nicht zur selben Zeit auftreten, weil die PDO-Operation abgeschlossen sein muss, ohne eine Ausnahme von sich selbst zu werfen, damit Ihre Ausnahme ausgelöst wird. – BeetleJuice