【PHP講座】PDOを利用したデータベース接続

PDOを利用したデータベース接続

前回は phpMyAdminのセキュリティの設定 について学習しました。

【PHP講座】phpMyAdminのセキュリティ設定

2018.10.05

今回は PDO を利用したデータベース接続 についてです。

PHP からデータベースへ接続する方法はいくつかありますが、PDO(PHP Data Object)が使える環境であれば、この方法がおすすめです。

軽量で高性能なインターフェースを定義します。

それでは見ていきましょう。



データベースへの接続

PDOによるデータベースへの接続です(MySQLの場合)。

$dbh = new PDO('mysql:host=ホスト名;dbname=データベース名;charset=文字コード', ユーザー名, パスワード);

ここで Java を学習したことがある方は似ていると感じたかもしれませんが。

まさにその通りでオブジェクト指向的な考え方なのです。

new演算子で PDO クラスのオブジェクトをインスタンス化します。

ちなみにインスタンス化というのは、クラスから生成した実際に動作するオブジェクトのことです。

PDO 実行時のエラーモードを設定

PDO実行時のエラーモードを設定します。

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

SQLの発行

SQLの発行です。

$stmt = $dbh->query(SQL文);

ちなみに -> は、アロー演算子と言います。

インスタンスのプロパティやメソッドにアクセスするのに使います。

SQLの結果を配列として取り出す

上の続きですが、結果を配列として取り出します。

$stmt に結果が格納されているので、それを取り出します。

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

ここで PDO::FETCH_ASSOC は、実行結果をカラム名を付けた配列として返します。

PDO::FETCH_NUM なら、実行結果を0から始まるカラム番号を付けた配列として返します。

PDO::FETCH_BOTH なら、実行結果をカラム名と0から始まるカラム番号を付けた配列として返します。

データベースを切断する

データの操作が終わったら、データベースとの接続を切断します。

$dbh = null;

try~catch文でエラーをチェックする

データベース接続する場合、try~catch文でエラーをチェックできるようにすべきです。

try {
    // 通常動作(データベース接続から切断までのコード)
} catch (Exeption $e) {
    // 例外処理(エラーが起きたときに行うコード)
}

データベースのエラーはわかりにくいので、こういった処置をしていないと見た目ではわからなくても、整合性がとれなくなってしまうといったこともあり得ます。

また、次のようにエラーメッセージを取得し、表示させることもできます。

echo $e->getMessage();

ただし、実際のサービスを想定した場合、エラーメッセージをブラウザで表示させることはないでしょうし、$e->getMessage() に以前紹介した htmlspecialchars関数を使う方が安全性が向上します。

最後に

ビジネス

いかがでしょうか。

PHP のバージョンが古いとかで使えない場合は低レベルデータベース関数を使う必要があります。

しかし、現状だとデータベースの接続は PDO を利用するのが一般的みたいです。

次回は、SQLの基礎 について紹介していきます。

【PHP講座】SQLの基礎

2019.05.13

データベースを扱う以上、最低限の SQL文は、理解しておいた方が良いと思います。