概要 PDO エラー処理には3通りあります。 (1) DO::ERRMODE_SILENT 最初はその名の通り、エラーが起きてもなにも起こりません。そのまま実行されますが、エラー情報は設定されていますし、戻り値も正しく返ります。一番簡単でバグさえなければ問題は発生しにくいですが、複雑な問題を確認する為には戻り値とメッセージを常に確認して正しいエラー処理を行う必要があります (2) PDO::ERRMODE_WARNING 二つ目は、さらにPHPの通常のエラーメッセージを出力させるようにしたバージョンです。初期段階のデバッグに有効です (3) PDO::ERRMODE_EXCEPTION 三つ目は、try 〜 catch を使うようにしたものですが、慣れていないと扱いは少し難しくなります。しかし、例外によりスクリプトが終了した際には、トランザクションは自動的に ロールバックされるそうです。 前者でどうなるかは未確認ですが、業務アプリケーションならばこちらを選択したほうが良いでしょう。個人の一般の WEB アプリならばそこまで神経質になる必要は無いと思いますので、デフォルトの ERRMODE_SILENT で良いと思います
<?php $strDriver = "{SQL Native Client}"; $strTarget = "NIGHT_TCP"; // 別名 $strDB = "lightbox"; $strUser = "sa"; $strPass = "passwordpassword"; // ********************************************************** // 接続 // ********************************************************** $Cn = new PDO( "odbc:Driver=$strDriver;Server=$strTarget;" . "Database=$strDB;Uid=$strUser;Pwd=$strPass;"); // デフォルトエラーモード $Cn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT ); // 存在しない列を更新 $Query = "update [社員マスタ] set [生年月] = '2005/01/01'"; $Query .= " where [社員コード] = '0001'"; $ret = $Cn->exec( $Query ); if ($ret===false) { print_r( $Cn->errorInfo() ); } // エラー表示( デバッグに有効 ) // 抑制する場合は、@$Cn->exec( $Query ); $Cn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); // 存在しない列を更新 $Query = "update [社員マスタ] set [生年月] = '2005/01/01'"; $Query .= " where [社員コード] = '0001'"; $ret = $Cn->exec( $Query ); if ($ret===false) { print_r( $Cn->errorInfo() ); } // try catch 用 $Cn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); // 存在しない列を更新 $Query = "update [社員マスタ] set [生年月] = '2005/01/01'"; $Query .= " where [社員コード] = '0001'"; try { $ret = $Cn->exec( $Query ); } catch( PDOException $e ) { print $e->getMessage(); } $Cn = null; ?>