10-2. PHPからデータベースを操作する②PDOの利用
10章進めていきます。
昨日はPHPのプログラム内からのデータベースへの接続方法について勉強しました。
mysqliクラスもしくはPODクラスにオブジェクトを生成することでデータベースへの接続ができました。
ここで出てきた「POD」について、もう少し掘り下げて勉強します。
1-1. PODとは
PODはPHP Data Objectの略称です。PODとは、PHPからデータベースに接続して様々な処理をするための機能をまとめたクラスです。
mysqliクラスはMySQLサーバーのみ対象としていますが、PODはドライバ(データベースを制御する機能)を切り替えることで、MySQLだけではなく、PostgreSQL、SQLiteなど複数のデータベースを操作できます。
このような機能の集まりをデータベース抽象化レイヤと呼びます。
PODの利点のひとつとして、別の種類のデータベースに変わってもほとんどプログラムに変更を加えずに利用できる点があげられます。
1-2. ハンドラ
PODによりデータベースに接続するときには、new演算子でPODクラスからオブジェクトを生成します。
このオブジェクトを「データベースハンドラ」または「データベースハンドル」といいます。
「ハンドラ」とは、いつも待機していて必要なときに起動されるプログラムのことです。
データベースを操作するためのメソッドがいくつか定義されており、PODクラスの詳細は、
http://www.php.net/manual/ja/class.pdo.php
で確認できます。
1-3. 属性の変更
PDOクラスの「setAttributeメソッド」を使用するとMySQLサーバに接続するときにデータベースハンドラの属性を設定できます。
設定方法は以下。
属性名,属性値);
エラー属性を取得するモードをこの属性名「PDO::ATTR_ERRMODE」に設定します。
この属性に設定できる値は以下3つです。
PDO::ERRMODE_SILENT | エラーコードのみを設定します |
PDO::ERRMODE_WEARNING | E_WARNINGを発生させます |
PDO::ERRMODE_EXCEPTION | 例外を投げます |
また、SQL文のテンプレート(プリペアドステートメント)を利用できるように「PDO::ATTR_EMULATE_PREPARES」に「false」を設定します。
プリペアドステートメントは速度面と安全性を向上させる仕みです。
1-4. 接続エラーの表示
PDOによりデータベースへ接続して操作しているときに発生する異常(エラー)を「try-catch構文」を使って捕捉できます。
この機能は「例外処理」と呼ばれ、エラーが発生すると現在の正常な処理を中断して別の処理を実行します。
設定方法は以下。 }catch(例外クラス 変数){ //例外の時の処理を記述します。
//異常が発生する可能性のある処理を記述します。
throw new 例外クラス('エラーが発生しました');
print 変数->メソッド();
}
以上のことをふまえ、接続エラーを表示する機能を作成します。
try{ //print'PDOクラスによる接続に成功しました';// $pdo->setAttribute(PDO::ATTR_ERRMODE,
$pdo = new PDO('mysql:host=localhost;dbname=sampledb;charaset=utf8', '間違ったユーザー名','パスワード');
PDO::ERRMODE_EXCEPTION);
$pdo ->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
print "接続しました";
}catch(PDOException $Exception){
die('接続エラー:' . $Exception->getMessage());
}
?>
結果はこちら。
いじょー
次回はSQL文の発行をやります。
ふーーー