TOP書籍連動> クエリの実行
PDOの紹介
PDOの紹介

第2回:クエリの実行

著者:Ilia Alshanetsky   2005/12/14
1   2  3  次のページ
クエリの実行

   データベースへの接続が確立しPDOオブジェクトが使用可能になると、様々な関数を通して多くのオペレーションが実行されます。

   これらの関数はクエリを実行するexec()メソッドを含みますが、これらがレコードを返すことはありません。このタイプのクエリはUPDATE、INSERTやDELETEなどの命令文です。

   クエリの実行に成功すると、exec()メソッドは命令文によって取り出された1行分のデータを返します。データがない場合は0が返され、クエリが失敗するとFALSE を返します。

$rows_affected = $db->exec("INSERT INTO my_table (row1,row2) VALUES(1,2)");
if ($rows_affected === FALSE) { // query has failed
     $einfo = $db->errorInfo();
     echo $db->errorCode().": ".$einfo[2]."<br/>n";
}

   PHPは型指定のない言語なので、不用意な比較をするとFALSEと0を同じものとして判断してしまいます。もし"if(!$db->exec())"や"$db->exec() or die();"というコードがあるとすると、これが本来は正しい命令でも失敗してしまいます。

   このような状況を避けるために、「エラーチェック」が別個実行され、返ってきた値とFALSEが等しいかどうかについて、"==="を用いて型指定を行って比較が行われます。INSERTの失敗などのエラーが発生した場合、失敗の原因を調べるために2つの関数を使用することができます。

   1つ目は、発生したエラーを5バイト英数字のSQLSTATEコードで表示するerrorCode()メソッドです。SQLSTATEコードは様々なデータベースで共通しているので、エラーを特定する堅実な方法です。

   さらにエラーの詳細が知りたければ、データベースのネイティブエラーコードとエラーメッセージを配列の2番目と3番目の要素に入れて返してくれるerrorInfo()メソッドが使用できます。これはクエリが構文エラーで失敗したときや、データベースが構文解析できなかったクエリの内容を見る場合にとても役に立ちます。


PDOのエラー処理

   エラーについて知りたければ、PDOエクステンションが問題のある状況をどのように処理するのか試してみましょう。

   接続に失敗して例外を投げるような状況が発生したとき、PDOはその他多くのデータベースエクステンションとは違い、エラーに対して何も行わず、警告やエラーメッセージを表示することはありません。

   単純に開発者が状況を認識して対処できるように失敗した命令がFALSEを返すだけです。しかしこの設定は、setAttribute()メソッドを使用してPDOのエラー処理モードを変更することで、簡単に変えることができます。

   この関数は主にPDOの設定を変えるために使用されます。このような設定はPDOのコンストラクタの4番目の引数を変えることでも設定することができます。この場合はエラー処理の方法を設定できるPDO_ATTR_ERRMODEを設定します。使用可能な値は以下の通りです。

  • PDO_ERRMODE_SILENT:エラーと警告が表示されないデフォルトのモードです。
  • PDO_ERRMODE_WARNING:命令が失敗すると警告を出します。
  • PDO_ERRMODE_EXCEPTION:どのような状況でもクエリが失敗するとPDOが例外を投げます。

表1:PDO_ATTR_ERRMODEで使用可能な値

// PDO::setAttribute()のサンプル
$db->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_WARNING);
1   2  3  次のページ

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Ilia Alshanetsky
著者プロフィール
Ilia Alshanetsky
PHP開発チームの活動メンバーの1人であり、現在のPHP 4.3.X.のリリースマネージャー。また、オープンソース掲示板FUDフォーラム(http://fud.prohost.org/forum/)をはじめとする数多くのプロジェクトにも貢献している。


INDEX
第2回:クエリの実行
  クエリの実行
  設定可能な属性
  INSERTしたIDの取得