![](/images/common/spacer.gif) |
|
1 2 次のページ
|
![](/images/common/spacer.gif) |
PDO(PHP Database Object)の特徴(1)
|
前回で簡単に触れましたが、あらためてコンセプトとして挙げられている4点を検証しつつ、PDOの特徴を見ていきましょう。
|
ライトウェイト
|
![](/images/common/spacer.gif) |
PDO関連クラス一覧表からもわかるように、PDOは非常にシンプルなクラス構成と直感的なメソッドで成り立っています。スクリプトの記述が容易である点を、例を見ながら解説しましょう。まず、PDOの導入で追加されるクラス・メソッドの一覧を示します(表1、表2、表3)。
|
表1:PDOクラス |
メソッド |
戻り値 |
概要 |
__construct() |
PDO class |
コンストラクタ |
prepare() |
PDOStatemant class |
プリペアドステートメントの作成 |
beginTransactin() |
boolean |
トランザクションの開始 |
exec() |
boolean |
SQLの実行 |
commit() |
boolean |
コミットの発行 |
rollBack() |
boolean |
ロールバックの発行 |
lastInsertId() |
Int |
最終インサートIDの取得 |
getAttribute() |
Int |
アトリビュートの取得 |
setAttribute() |
boolean |
アトリビュートの構成 |
errorCode() |
Array |
エラーコードの取得 |
errorInfo() |
Array |
エラー情報の取得
|
|
![](/images/common/spacer.gif) |
表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 |
エラー情報の取得
|
|
![](/images/common/spacer.gif) |
表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 次のページ
|
![](/images/common/spacer.gif)
|
|
![](/images/common/tyosya.gif)
|
著者プロフィール
著者:岩切洋一
「まるごとPHP!Vol.1(インプレス刊)」にて本記事「PDOデータベース抽象化レイヤクラス」の執筆や、「WEB+DB PRESS Vol.18(技術評論社刊)」にて「PEAR実践入門 第4章 使ってみよう!作ってみようPECL」の執筆などを行う。
|
|
|
|