Só queria adicionar a isso, tive frustrações semelhantes com a falta de uma mensagem de erro.
Para impedir que o PDO falhe silenciosamente, você pode definir o modo de erro na conexão do PDO.
$dbh = new PDO();
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Há também
PDO::ERRMODE_WARNING
se você quiser erros, mas ainda continuar.