はじめに
PHPにはデータベースにアクセスする方法がいくつか用意されています。そのような方法の一つに、「PEAR MDB2」があります。名前の通りPEARのライブラリとして公開されています。PEARにはMDB2のほかに「DB」や「MDB」といったライブラリがあり、現在でも利用することができます。しかしながら、これらの開発はすでに終了しており、開発者はMDB2に移行することが推奨されています。
本稿では、PEAR MDB2を使って、PHPからデータベースを操作する次のような基本的な方法を紹介します。
- PEAR MDB2を使うとデータベース管理システム(MySQLやPostgreSQL、SQLite等)に依存しないコードを書くことができる。
- SQLの実行には、プリペアードステートメントを使うのが基本である(例外あり)。
- PHPにはPEAR MDB2の他にもデータベースへのアクセス手段が数多く用意されている。それらの中から適切なものを選ぶ指針。
対象読者
- PHPの基本的な文法を知っている方
- SQLの基本的な使い方を知っている方
必要な環境
PHP 5とMySQL 5がインストールされ、動作するようになっている環境が必要です。筆者はXAMPP 1.6.4 for Windows(PHP 5.2.4, MySQL 5.0.45を含む)に、MDB2_Driver_mysqli 1.4.1(後述)をインストールした環境で動作を確認しました。
ドライバのインストール
MDB2単体ではデータベースにアクセスすることはできません。利用するデータベース用のドライバが必要です。MySQLはもちろん、PostgreSQLやSQLite、Oracle、SQL Serverなどのためのドライバが公開されています(PEARのウェブサイトを参照)。ここではMySQL用のドライバであるMDB2_Driver_mysqliをインストールします(PHP5のみで利用可能。古いバージョン用にはMDB2_Driver_mysqlが用意されている)。
コマンドプロンプトから次のようにMDB2_Driver_mysqliをインストールします(PEAR error on Config.php Line 1003 in Vista (solution)を参考に、コマンドの実行前に、c:\xampp\php\pear.iniの「"\xampp」を「"C:\xampp」に修正)。
c: cd \xampp\php pear install MDB2_Driver_mysqli
ここではMySQLのドライバだけをインストールしましたが、他のドライバをインストールして、データベース管理システムを切り替えて使うこともできます。MDB2はデータベース接続を抽象化しているので、切り替える際に、PHPのコードの変更は最低限で済むようになっています(標準的なSQLを使用しているなら接続先の指定を変えるだけでデータベース管理システムを変更可能)。
データベースの準備
解説に使うデータベースを作成します。
InnoDBを有効にする
まずはInnoDBを有効にしておきましょう。後でトランザクションを試す際にInnoDB型のテーブルが必要になります。InnoDBを有効にしないでテーブルを作成すると、その型はMyISAMになりますが、MyISAMではトランザクションを利用できません。
my.cnfの「skip-innodb
」をコメントアウトし、その下のInnoDBの設定を有効にしておきます。
#skip-innodb #InnoDBの設定をスキップしない # Uncomment the following if you are using InnoDB tables #InnoDBのためのファイルの格納場所 innodb_data_home_dir = C:/xampp/mysql/data/ #InnoDBのためのファイルの初期サイズと拡張方法(ここでは自動) innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = C:/xampp/mysql/data/ innodb_log_arch_dir = C:/xampp/mysql/data/
データベースの作成
MySQLを再起動し、次のSQLを実行します。
-- データベースを作成 CREATE DATABASE mydb DEFAULT CHARACTER SET utf8; -- アクセス権限の設定(ユーザ名はtest、パスワードはpass) GRANT ALL ON mydb.* to test@localhost IDENTIFIED BY 'pass'; -- テーブルを作成(トランザクションを使うため、エンジンはInnoDBにする) USE mydb; CREATE TABLE books( id INT AUTO_INCREMENT PRIMARY KEY, title TEXT NOT NULL, publisher VARCHAR(50) DEFAULT '' NOT NULL, year INT DEFAULT 0 NOT NULL, price INT DEFAULT 0 NOT NULL ) ENGINE=InnoDB;
以上で準備は完了です。