概要 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;
?>
|
|
【PHP + データベースの最新記事】
- PDO MySQL のバインドを使用した標準的な記述( ロリポップ )
- PHP で MySQLをテストする為のソースコード
- PHP で ODBC 関数を使って MS Access( データベース )にアクセスして結果を JSON 文字列として出力する
- Windows 環境の MySQL + PHP で、ODBC ドライバを使用してデータを取得する場合の3パターン
- PHP : SQLインジェクション対策付きの、MySQL のデータを JSON で返す自家製 API テスト用のテンプレート3パターン
- PHP で 自家製 API を作成して jQuery の簡単なコードで更新処理を行うサンプル
- PHP : PIPES_AS_CONCAT を使用して、CSV 作成処理をサーバの負荷にして高速に WrodPress のデータを Excel で読み込める CSV として保存する処理
- PHP : WrodPress のデータを insert SQL で保存する処理
- PHP : WrodPress のデータを Excel で読み込める CSV として保存する処理
- PHP で MySQLi 使用時の データ型定数( MYSQLI_TYPE_ ) の詳細 ( バックアップ用 insert 文を作る為 )
- PHP から MySQL の簡易的なバックアップを取得する( 但し、DBサーバがディスクへの書き込み権限を持っている必要があります )
- PHP : JSON 文字列で定義されたフォーマットを元に、そのフォーマットにセットされた配列を使って insert と update の SQL 文を自動作成。
- PHPのマニュアルにある、SQLインジェクション攻撃の例
- PHP : SQLite3 を PDO の ODBC 経由で読み込み
- PHP : 5.3 / 5.2.11 用共用 sqlite3(日本語テーブル) 読み込み
- PHP : Oracle を処理する COM を使ったクラス






