PHPプログラミング

ベストプラクティス

データベース PDO その1

PDOについて

  • このエントリーをはてなブックマークに追加

様々な種類のデータベースへアクセスするための手段としてPHPが標準で用意しているPDO(PHP Data Objects)。今回はこのPDOがどんなものかご紹介します。

目次

  1. #  データベースへのアクセスに便利なPDO
  2. #  概要
  3. #  PDOを使うメリット
  4. #  PDOのデメリット

データベースへのアクセスに便利なPDO

今回はPDOについて紹介をしていきます。
次のような方が対象です。

  • PDOってどんなもの?なにができるの?
  • PDOを使うメリット・デメリットを知りたい
  • PDOを使ってデータベースへ接続したい

Note

本記事の「データベース」とは「リレーショナルデータベース」を指します。

概要

PDOは「PHP Data Objects」の略で、PHPからデータベースへ簡単にアクセスするための拡張モジュールです。
PHP 5.1以降から標準でバンドルされるようになり、現在主流のバージョンであればほぼ使うことができるようになっています。

PDOを使うメリットはズバリ、データベースの「バージョン」「種類」の違いを意識せずにコードを書けること。

PDOで様々なデータベースへアクセスするイメージ

次のようなデータベースで共通した操作についてはPDOから行うことができます。

  • DB接続・解除
  • 基本的なSQL(CRUD)
  • テーブル操作
  • トランザクション

続いて、PDOを使うメリットとデメリットを紹介します。

PDOを使うメリット

データベースのバージョンの違いを吸収できる

プログラミング言語やデータベースは日々改良されているため頻繁にバージョンアップされていきます。
細かい修正のマイナーアップデートなら特に問題にならないことが多いですが、時々メジャーアップデートがあり、用意された関数に変更があったり、そもそもコードの書き方自体が変わることがあります。
その場合、現在動いているシステムについてもコード修正する必要が発生します。

具合的な例でいうと、PHPには元々MySQL関数の拡張モジュールが用意されていました。
そのモジュールでは「mysql_connect関数」「mysql_query関数」という関数が用意されていました。
しかし、次世代のMySQLにアクセスする拡張モジュールとして「MySQLi」が登場し、従来のMySQL拡張モジュールはPHPバージョン5.5で非推奨となり、7.0でついに削除されました。

MySQL拡張モジュールからMySQLi拡張モジュールへの変更で大きな点は、オブジェクトベースになったところです。
変更を最小限にできるよう、オブジェクトを使わない関数のみを使った使用方法もありますが、関数に渡すパラメータの順番に変更があったりするため、「今までのコードをそのまま使い回す」という感覚では難しい点がありました。

このような変更があるとPHPやMySQLのバージョンを更新するごとにコードも更新する必要が生じます。
しかしPDOを使っていれば、PDO側でバージョンの違いを吸収してくれるため、バージョンアップごとにコード修正する手間を省くことができます。

データベースの種類の違いを吸収できる

システムを運用して時間が経つと、サーバーを含めたシステム周りの事情が変化します。
システム的にはOSやソフトウェアの大きなアップデート。
人員的にはシステムをメンテナンス・改修するスタッフ(請負会社)の変更があったり。

そのような中で、PostgreSQLからMySQLへ、軽量なSQLiteへといったデータベース自体の変更が発生することがあります。

データベースを変更する場合は、もちろんデータベースへアクセスするコードは修正しなければなりません。
そういった修正を必要最小限に抑え、工数を抑える部分でもPDOは活躍します。

PDOのデメリット

データベースの機能をフルに扱うことができない

データベースにはたくさんの種類がありますが、それぞれが異なる特徴・機能を持っています。
扱いやすく汎用性の高いMySQL、軽量なのでリソースを抑えることのできるSQLite、大規模な法人向けに強いOracle。
システムの用途によって最適なデータベースも変わります。

PDOは全てのデータベースが持つ基本的な機能については網羅していますが、逆にそれぞれのデータベースのみでしか使えないような機能を扱うことはできません。

もう少し具体的に、それぞれのデータベースで異なる点を挙げてみます。

  • データの「型」の種類や扱い方
  • テーブル構造の扱い
  • 検索(インデックス関連)
  • 細かいSQL

痒いところに手が届かないこともあり万全とまではいきませんが、基本的なSQL(C:登録、R:取得、U:更新、D:削除)はデータベースを跨いでも共通で使用できるため、大体の場合においては問題なく使えます。

以上、PDOについてのご紹介でした。
次からは実際にコードを使ってPDOの操作を行っていきます。

PDOについてより詳しく知りたい方は、php.netの「PDO」をご覧ください。
PDO – php.net

  • このエントリーをはてなブックマークに追加