Let's take a look at what the PHP Manual has to say about PDO::ERRMODE_SILENT
This is the default mode. PDO will simply set the error code for you to inspect using the PDO->errorCode() and PDO->errorInfo() methods on both the statement and database objects; if the error resulted from a call on a statement object, you would invoke the PDOStatement->errorCode() or PDOStatement->errorInfo() method on that object. If the error resulted from a call on the database object, you would invoke those methods on the database object instead.
So, PDO will set the error code, and you can retrieve it using PDO->errorCode() and PDO->errorInfo(). Now, if there is a connection error, you do not have a valid PDO object, so you cannot retrieve the error message using those member functions. Consequently, you should do what the PHP Manual recommends:
If there are any connection errors, a PDOException object will be thrown. You may catch the exception if you want to handle the error condition, or you may opt to leave it for an application global exception handler that you set up via set_exception_handler().