• 締切済み

データベースの登録失敗の時の挙動について

今PDOとphpを勉強中です。 フォームからデータベースにデータを登録できるようなサイトを作ったのですが、いくつか疑問点が出てきました。 まずデータベースのフィールドが5個くらいあり、テキストフォームも5個作り、5個の値をデータベースに飛ばし登録します。単純なプログラムなのですが、ユニーク設定などをしているとデータベースへの登録が失敗する事があります。 データ登録が失敗した場合「失敗しました」と画面に出したいのですが、 失敗したかどうか調べるPDOの関数はあるでしょうか?(今はちゃんと登録されているかどうかデータベースを開けないと分かりません) 詳しい方いましたらよろしくお願いします。 $st = $pdo->prepare("INSERT INTO aaa VALUES(?,?,?,?,?"); $st->execute(array($111,$222,$333,$444,$555));

みんなの回答

noname#244856
noname#244856
回答No.1

PDOStatement::executeの返り値が成功したか/失敗したかどうかをTrue/Falseで示してくれますが、そのように「返り値で可否をチェックする」コーディング自体が手続き型の古い書き方に該当します。オブジェクト指向のモダンなコーディングでは、「例外」を活用して、成功したときだけのコーディングに専念し、別の場所で失敗したケースを捕まえるような書き方をします。 PDOで例外処理を行うには、「PDO::ATTR_ERRMODE」オプションに「PDO::ERRMODE_EXCEPTION」を設定します。 Qiita - PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 また、オブジェクト指向のメリットの1つに「メソッドチェーン」があります。 Wikipadia - Method chaining http://en.wikipedia.org/wiki/Method_chaining#PHP PDO自体は「中途半端なオブジェクト指向」に設計されており、メソッドチェーンを活用したいのであれば、PDOStatement::executeやPDOStatement::bindValueなどを「return $this;」するようにして継承クラスを作ると非常に使い勝手がよくなるのでオススメです。 PDO2 https://github.com/Certainist/PDO2

関連するQ&A