牛、豚、鶏、どれか一つ食べられなくなるとしたら?

今PDOとphpを勉強中です。
フォームからデータベースにデータを登録できるようなサイトを作ったのですが、いくつか疑問点が出てきました。
まずデータベースのフィールドが5個くらいあり、テキストフォームも5個作り、5個の値をデータベースに飛ばし登録します。単純なプログラムなのですが、ユニーク設定などをしているとデータベースへの登録が失敗する事があります。
データ登録が失敗した場合「失敗しました」と画面に出したいのですが、
失敗したかどうか調べるPDOの関数はあるでしょうか?(今はちゃんと登録されているかどうかデータベースを開けないと分かりません)


詳しい方いましたらよろしくお願いします。



$st = $pdo->prepare("INSERT INTO aaa VALUES(?,?,?,?,?");
$st->execute(array($111,$222,$333,$444,$555));

A 回答 (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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!