Part4:PDO(PHP Data Object)データベース抽象化レイヤクラス(2) (1/2)

まるごと PHP!
まるごと PHP!

Part4:PDO(PHP Data Object)データベース抽象化レイヤクラス(2)

著者:岩切洋一(IWAKIRI, Yohichi)   2005/3/30
1   2  次のページ
PDO(PHP Database Object)の特徴(1)

   前回で簡単に触れましたが、あらためてコンセプトとして挙げられている4点を検証しつつ、PDOの特徴を見ていきましょう。
ライトウェイト
   PDO関連クラス一覧表からもわかるように、PDOは非常にシンプルなクラス構成と直感的なメソッドで成り立っています。スクリプトの記述が容易である点を、例を見ながら解説しましょう。まず、PDOの導入で追加されるクラス・メソッドの一覧を示します(表1、表2、表3)。

表1:PDOクラス
メソッド戻り値概要
__construct()PDO classコンストラクタ
prepare()PDOStatemant classプリペアドステートメントの作成
beginTransactin()booleanトランザクションの開始
exec()booleanSQLの実行
commit()booleanコミットの発行
rollBack()booleanロールバックの発行
lastInsertId()Int最終インサートIDの取得
getAttribute()Intアトリビュートの取得
setAttribute()booleanアトリビュートの構成
errorCode()Arrayエラーコードの取得
errorInfo()Arrayエラー情報の取得
表2:PDOStatementクラス
メソッド戻り値概要
execute()booleanプリペアドステートメントの実行
fetch()Arrayレコードの取得
bindParam()booleanパラメータのバインド
bindColumn()booleanカラムのバインド
rowCount()Int影響を受けたレコード数を返す
fetchSingle()Array単一レコードの取得
fetchAll()Array全レコードの取得
getAttribute()PDO classアトリビュートの取得
setAttribute()booleanアトリビュートの設定
errorCode()Arrayエラーコードの取得
errorInfo()Arrayエラー情報の取得
表3:PDOExceptionクラス
メソッド戻り値概要
__clone()PDOExceptionクラス・オブジェクトの複製
__construct()PDOExceptionコンストラクタ
getCode()Int例外コードの取得
getFile()Stringカラムのバインド
getLine()Int例外発生行番号の取得
getMessage()String例外メッセージの取得
getTrace()PDO classバックトレースの取得
getTraceAsString()Stringバックトレースを文字列で取得
__toString()Stringオブジェクトを文字列に変換

   データベースへの接続テーブルの作成を行うスクリプトはリスト1のようになります。

リスト1:データベース接続
try{
// tryブロック内で接続処理・テーブルの作成
$dbh = new PDO("mysql: dbname=stock_db; host=hostname", "user", "password");
$dbh->exec('CREATE TABLE stock (item_id INT PRIMARY KEY, number INT) TYPE=innoDB');
$dbh->exec('CREATE TABLE in_item (item_id INT , number INT) TYPE=innoDB');
}
catch (PDOException $e) {
// catchブロックで接続失敗時の処理を行う
die($e->getMessage());
}

   PHP5では、例外処理が行えるのでここで使ってみました。1行目から始まるtryブロック内にデータベース接続処理とテーブル作成のSQLを記述します。PDOによる処理は、3行目のようにDBハンドラオブジェクトを新規に作成することで行われます。PEAR::DBと同様にDSN(Data Source Name)を作成しますが、書式が異なるので注意が必要です(例ではMySQLを使用)。接続に失敗した場合には例外が発生し、PDOExceptionオブジェクトがthrowされます。7行目のcatchブロックで例外を捕捉し、エラー詳細を表示して終了します。エラー判定をtryブロックに含めずに済むため、スクリプトも読みやすくなるでしょう。

1   2  次のページ



著者プロフィール
著者:岩切洋一
「まるごとPHP!Vol.1(インプレス刊)」にて本記事「PDOデータベース抽象化レイヤクラス」の執筆や、「WEB+DB PRESS Vol.18(技術評論社刊)」にて「PEAR実践入門 第4章 使ってみよう!作ってみようPECL」の執筆などを行う。


INDEX
Part4:PDO(PHP Data Object)データベース抽象化レイヤクラス(2)
PDO(PHP Database Object)の特徴(1)
 PDO(PHP Database Object)の特徴(2)
まるごと PHP!
Part1PHP5のオブジェクト指向(1)
PHP5のオブジェクト指向(2)
PHP5のオブジェクト指向(3)
Part2トライ!SQLite(1)
トライ!SQLite(2)
トライ!SQLite(3)
Part3MySQL拡張サポート(1)
MySQL拡張サポート(2)
MySQL拡張サポート(3)
Part4PDO(PHP Data Object)データベース抽象化レイヤクラス(1)
PDO(PHP Data Object)データベース抽象化レイヤクラス(2)
PDO(PHP Data Object)データベース抽象化レイヤクラス(3)
Part5PHP5のXMLサポート(1)
PHP5のXMLサポート(2)
PHP5のXMLサポート(3)
Part6PHP4からPHP5への移行のポイント

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored