Volevo solo aggiungere a questo, ho avuto frustrazioni simili per la mancanza di un messaggio di errore.
Per impedire che il PDO si interrompa silenziosamente, è possibile impostare la modalità di errore sulla connessione PDO.
$dbh = new PDO();
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
C'è anche PDO::ERRMODE_WARNING
se vuoi errori ma continua comunque.