Използвайте PDO errorinfo()
функция
за да разберете защо.
if( ! $sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1") ) {
die(var_export($db->errorinfo(), TRUE));
}
Късна актуализация
В интерес да направя старите си отговори по-добри, настройването на PDO да хвърля изключения при грешка е много по-управляемо от проверката на всяка функция.
$dbh = new PDO($connstr, $user, $pwd);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Или по-накратко:
$dbh = new PDO($connstr, $user, $pwd, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);