エラー処理は、PDO とデータベースドライバとの間のハンドシェイキング プロトコルを使用して実装されています。データベースドライバのコードは、 インターフェイス関数から失敗 (0) を返すことにより、 エラーが発生したことを PDO に通知します。ゼロが返されると、 (pdo_dbh_t あるいは pdo_stmt_t のいずれかの) 制御ブロックの error_code フィールドに値が設定されます。 正しい値が使用されることを保証するため、両方のブロックのフィールドに 同じ値を設定しておくことを推奨します。
error_mode フィールドの大きさは 6 バイトであり、5 文字の ASCIIZ SQLSTATE 識別コードが含まれます。このコードがエラーメッセージを処理します。 内部の PDO エラーメッセージテーブルから、SQLSTATE コードを使用して エラーメッセージを検索します (エラーコードおよびそのメッセージの 一覧は、pdo_sqlstate.c を参照ください)。PDO で定義されていないコードが 指定された場合は、デフォルトの値 "Unknown Message" が使用されます。
SQLSTATE コードおよびエラーメッセージに加え、PDO は ドライバ固有の fetch_err() ルーチンをコールすることにより エラーの追加データを取得します。このルーチンには配列が渡され、 ドライバはその配列に追加情報を書き込みます。配列の各項目には、 以下のような追加情報が格納されます。
ネイティブエラーコード。たいていの場合、これはデータベースの API から取得したエラーコードになるでしょう。
内容を表す文字列。ここには、エラーに関連する追加情報を何でも 含めることができます。一般的には、エラーメッセージ・コード上で エラーが発生した位置やその他開発者にとって有益であると思われる 情報を含めます。エラーが発生した際にデータベースインターフェイスから 得られる診断情報は、すべて含めておくとよいでしょう。 ドライバが検出したエラー (例えばメモリ確保の問題など) については、 どのような情報を提供すべきかはドライバの開発者が判断することに なります。