Use el errorinfo()
de PDO función
para averiguar por qué.
if( ! $sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1") ) {
die(var_export($db->errorinfo(), TRUE));
}
Actualización tardía
Con el fin de mejorar mis respuestas anteriores, configurar PDO para que genere excepciones en caso de error es mucho más manejable que verificar el retorno de cada función.
$dbh = new PDO($connstr, $user, $pwd);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
O, más concisamente:
$dbh = new PDO($connstr, $user, $pwd, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);