## データベースサポートの変更

- PDO の概要

- MySQL サポートの変更

- SQLite サポートの変更

## PDO の概要

PHP Data Objects (PDO) は PHP 5.0 の時に PECL 拡張モジュールとして公開され、その後 PHP 5.1.x で PHP のコア配布物に組み込まれるようになりました。 PDO 拡張モジュールはデータベースへのアクセスのための一貫したインターフェイスを提供し、 データベース固有の PDO ドライバとともに使用します。 各ドライバはデータベース固有の関数を保持していることもありますが、 クエリの発行やデータの取得といった基本的な機能については PDO 関数がカバーしています。 この関数は、 PDO::__construct() で指定したドライバを使用します。

PDO 拡張モジュールやドライバは、 共有モジュールとしてのビルドを想定していることに注意しましょう。 これにより、PECL からドライバをアップグレードする際に PHP そのものを再ビルドする必要がなくなります。

PHP 5.1.x のリリース時点では、PDO は広範囲に及ぶテストを済ませており ほとんどの環境でうまく動作するはずです。しかし、PDO やそのドライバは比較的歴史が浅く、 データベース固有の機能のいくつかを実装できていないということを理解しておくことが大切です。 新しいプロジェクトで PDO を使用する際には、事前に動作検証を十分に行うようにしましょう。

既存のコードは、一般的にはこれまで存在したデータベース拡張モジュールに依存しています。 これらについてもメンテナンスが続けられます。

## MySQL サポートの変更

PHP 4 では、MySQL 3 のサポートが組み込まれていました。 PHP 5.0 のリリース時には「mysql」および「mysqli」という 2 つの MySQL 拡張モジュールがありました。これらは、それぞれ MySQL < 4.1 および MySQL 4.1 以降をサポートするように設計されていました。 PHP でサポートされるあらゆるデータベースの API への高速なインターフェイスを提供する PDO が公開されたことに伴い、PDO を使用して書かれた PHP コードでは、 PDO_MYSQL ドライバによって現行のいずれのバージョン (MySQL 3、4 あるいは 5) でもサポートすることが可能となりました。これは、コンパイル時に使用した MySQL ライブラリのバージョンに依存します。 後方互換性を確保するためにこれまでの MySQL 拡張モジュールも残されていますが、 デフォルトでは有効になりません。

## SQLite サポートの変更

PHP 5.0.x では、組み込みの sqlite 拡張モジュールで SQLite 2 がサポートされていました。 PHP 4.3 および PHP 4.4 でも、PECL 拡張モジュールとして同じものが使用可能でした。 PDO が公開されたことで、sqlite 拡張モジュールは 'sqlite2' という名前の PDO ドライバとして機能するようになりました。このため、PHP 5.1.x での sqlite 拡張モジュールは PDO 拡張モジュールに依存しています。

PHP 5.1.x では、sqlite への接続用にいろいろなインターフェイスを公開しています。

sqlite 拡張モジュールでは "classic" な 手続き型/オブジェクト指向 API を提供しており、 これは以前のバージョンの PHP と同じように使用できます。 またこれとは別に PDO 'sqlite2' ドライバを提供しており、こちらは PDO API を使用して SQLite 2 データベースにアクセスします。

さらに、PDO_SQLITE は 'sqlite' バージョン 3 ドライバを提供します。 SQLite バージョン 3 は SQLite バージョン 2 に比べて非常に優れていますが、 2 つのバージョンの間でファイルフォーマットに互換性がありません。

以前のバージョンの PHP で動作している SQLite ベースのプロジェクトがあるのなら、 ext/sqlite を使用し続ければ何の問題もありません。しかし、PDO および sqlite を明示的に有効にする必要があります。新しいプロジェクトの場合は、PDO および 'sqlite' (バージョン 3) ドライバを使用すべきです。 これは SQLite 2 に比べて高速で、ロック処理が改善されており、 プリペアドステートメントやバイナリ列をネイティブにサポートしています。

SQLite 拡張モジュールを使用するには、PDO を有効にする必要があります。 もし PDO を共有モジュールとしてビルドしたのなら、 SQLite 拡張モジュールも同様に共有モジュールとする必要があります。 これは、PDO ドライバを提供している他のすべての拡張モジュールについても同様です。