Errors and error handling

PDO offers you a choice of 3 different error handling strategies, to fit
your style of application development.

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.

PDO::ERRMODE_WARNING

In addition to setting the error code, PDO will emit a traditional
E_WARNING message. This setting is useful during debugging/testing, if
you just want to see what problems occurred without interrupting the
flow of the application.

PDO::ERRMODE_EXCEPTION

In addition to setting the error code, PDO will throw a
PDOException
and set its properties to reflect the error code and error
information. This setting is also useful during debugging, as it will
effectively "blow up" the script at the point of the error, very
quickly pointing a finger at potential problem areas in your code
(remember: transactions are automatically rolled back if the exception
causes the script to terminate).

Exception mode is also useful because you can structure your error
handling more clearly than with traditional PHP-style warnings, and
with less code/nesting than by running in silent mode and explicitly
checking the return value of each database call.

PDO standardizes on using SQL-92 SQLSTATE error code strings; individual
PDO drivers are responsible for mapping their native codes to the
appropriate SQLSTATE codes. The PDO::errorCode()
method returns a single SQLSTATE code. If you need more specific
information about an error, PDO also offers an
PDO::errorInfo() method which returns an array
containing the SQLSTATE code, the driver specific error code and driver
specific error string.

/* Using try/catch around the constructor is still valid even though we set the ERRMODE to WARNING since PDO::__construct will always throw a PDOException if the connection fails.*/try {$dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit;}

// This will cause PDO to throw an error of level E_WARNING instead of an exception (when the table doesn't exist)$dbh->query("SELECT wrongcolumn FROM wrongtable");?>