PHPからMySQLデータベースを利用する

2003/09/04

PHPからMySQLデータベースへアクセスするには次の2つの方法があります。

  1. PHPの標準関数を使ってアクセスする。
  2. PEAR(PHP Extension and Application Repository)を利用してアクセスする。

私はつい最近までPEARというものを知りませんでしたので標準関数を使ってアクセスしていました。
標準関数を利用した自作のクラス・ライブラリでデータベースのアクセスをしていたんです。

しかし、当然ですが私の自作クラスよりもPEARで作られているクラスのほうが汎用性が高いので、このページではPEARを使ってMySQLへアクセスする手法を書きます。

なお、PEARの日本語マニュアルはここにありますので、詳しくはこちらを参照してください。

PHP標準関数でデータベースへアクセスする場合、関数名やパラメータなどが違うだけで、PEARと大差なく利用することができます。こちらにちらっと説明を書いておきました。


PEARとは

PEAR(PHP Extension and Application Repository)はPHPを拡張するパッケージです。私もほんとについ最近知りましたので詳しくはわかりませんが、C++のクラス・ライブラリのようなものだと考えればいいのではないでしょうか。

データベース・アクセスだけに絞れば、MySQL, PostgreSQL, ODBCなど、どのようなデータベース・サーバーでも同じコーディングが使えるというメリットがあります。

また、後からデータベース・サーバー・ソフトを変更してもわずかなプログラムの変更ですみます。


PEARの取得とインストール

Linux版PHPではRPMパッケージを使わずにソースからインストールしていれば、(PEARのデータベース部分は)すでにインストールされていると思います。(たぶんRPMでインストールしてもPEARが同梱されていると思いますが、私はいつもソースからインストールしているのでわかりません)

Windows版PHP4.3.3では、バイナリ・パッケージにPEAR自体は含まれていませんが、PEARのパッケージマネージャが含まれています。これを使って最新版をダウンロードできます。以下でPEARインストールについて説明します。

  1. PHP4.3.3をインストールしておきます。
  2. DOSプロンプトを起動します。
  3. PEARパッケージマネージャを起動します。
    C:\>php -f C:\php\PEAR\go-pear.php
  4. 「If you wish to abort, press Control-C now, or press Enter to continue:」でEnter
  5. 「HTTP proxy (password@proxy.myhost.com:port" target=_blank>http://user:password@proxy.myhost.com:port), or Enter for none:: 」でEnter(プロキシを利用してるなら、それを入力)。
  6. 「1-7, 'all' or Enter to continue:」でEnter
  7. 「Would you like to install these as well? [Y/n] :」でEnter。これでインストールが開始されます。
  8. 「Would you like to alter php.ini ? [Y/n] :」でEnter。これでphp.iniのinclude_pathが書き換わります。
  9. php.iniの変更を有効にするため、Apacheを再起動してください。

PHPからデータベースへアクセス

PHPからMySQLをアクセスする方法は以下のサンプルでわかると思います。

<?php
include "DB.php";

$dbUser = "データベース・ユーザー名";
$dbPass = "データベース・パスワード";
$dbHost = "localhostなど、ホスト名";
$dbName = "データベース名";

// MySQL="mysql", PostgreSQL="pgsql", MS SQL-Server="mssql", ODBC="odbc" などを指定
$dbType = "mysql";

$dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName";

// データベースに接続
$conn = DB::connect($dsn);

// 接続に失敗したらエラー表示して終了
if (DB::isError($conn)) exit($conn->getMessage());

// SQLの実行
$sSQL = "SELECT * FROM 家族情報";
$rs = $conn->query($sSQL);

if (! DB::isError($rs)) {
	// レコードの取得
	while ($rec = $rs->fetchRow(DB_FETCHMODE_ASSOC)) {
		echo $rec['家族氏名'] . "<p>\n";
	}

	// クエリー結果セットの開放
	$rs->free();
}
// データベースの切断
$conn->disconnect();
?>

フィールドの参照は $var['フィールド名'] というようにすればOKです。

上記でinclude時にエラーとなるようなら、php.iniのinclude_pathの値をWindowsなら「.;C:\php4\pear」に、Linuxなら「.:/usr/share/pear」に設定してください(PHP4.3.xの場合)。

このように、MySQLだろうとPostgreSQLだろうと、(データベース固有の機能を除いて)「$dbType = "mysql";」の行を変更するだけで、どのデータベースへも対応できます。

MySQLのページ トップへ

Copyright©2001-2019 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org