ダウンロード サンプルファイル (7.8 KB)
PHPでデータベースにアクセスするには、いくつかの方法が用意されています。本稿では、いま注目の「PEAR MDB2」を用いて、PHPからMySQLを操作する基本的な方法を紹介します。
はじめに
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;
以上で準備は完了です。
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 矢吹 太朗(ヤブキ タロウ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
