E' sbagliato l'approccio... l'eccezione è l'eccezzione, ci vuole un listener che intercetti l'errore e agisca di conseguenza. Se hai una classe che gestisce la gestione col db (o piu di una) fai in modo che lancia eventi/errori e basta, e ne metti un'altra in ascolto attorno. Sul come, dipende molto dalla struttura del progetto e delle classi. O gli passi alla classe un EventDispatcher, intercetti dentro la classe del Db tutti gli errori col try/catch e invece di propagare direttamente PDOException lo wrappi in tue eccezioni e le lanci con l'event dispatcher, al quale avrai attaccatto un opportuno listener che ascolti un particolare evento e faccia di conseguenza un'azione, oppure trovi altri modi in base al tuo codice attuale. Il problema che ti trovi una classe db legata ad un event dispatcher, che avrebbe poco senso, quindi dovresti mettere di mezzo un qualche sorta di proxy che ti permetta trasparentemente di agire sui metodi della classe db ma che intercetti gli errori e usi il dispatcher per girarli ai listener.