I think Exceptions aren't the worst move for database errors. While developing, an exception is just as descriptive as a usual error message. While in production, if *anything* fails in the database, it means that my query is malformed, my database connection is lost, I'm querying a table that doesn't exist, etcetera. All of those cases are cases I don't want to show a user, yet, I want to be informed, as they seem important enough. That's why I think exceptions are in the right place here, but in the end, this whole discussion is on semantics.

The thing I am amazed by is that people still use the plain PDO interface, instead of a wrapper. There are so many wrappers that give PDO a "better" API and set sensible defaults, that I can't grasp why someone still wants to work with $pdo->setAttribute( ) :)