Así es, es tal cual dice abimaelrc, el catch actua a la primera excepción que se lanze en el bloque y el catch agarra la excepción si esta definida, en caso contrario salta más arriba hasta que alguien la cache, un test podría ser así:
Código PHP:
Ver original$dbh = new PDO(...);
try {
$dbh->beginTransaction();
$dbh->query("insert...");
throw new PDOException('foo');
$dbh->commit();
} catch (PDOException $e) {
echo "something bad: " . $e->getMessage();
$dbh->rollback();
}
Ese código nunca funcionará porque estamos metiendo la excepción "a mano" la idea es que tu lanzes una excepción en base a condiciones conocidas o desconocidas.
Por ejemplo, que tal que quieres hacer un UPDATE pero solamente sabes que hay 1 registro, y por alguna razon rowCount te devuelve 2, lanzas una excepción, o cosas por el estilo.
Saludos.