SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

プログラミング未経験から始めるPHP入門

PEARライブラリを使ってプログラムのブラッシュアップに挑戦してみよう!
プログラミング未経験から始めるPHP入門~応用編(4)

第11回


ダウンロード サンプルソース (25.7 KB)

データベース処理ライブラリ「MDB2」

 PEARには、データベースと連携する処理に利用できる「MDB2」というライブラリがあります。このライブラリを利用することで、さまざまなメリットが享受できます。

 今回はまず、このMDB2を用いて過去に作成したプログラムをブラッシュアップしてみましょう。

MDB2を利用するメリット

 MDB2を使う大きなメリットの1つとして、データベース製品が変更になった際にメンテナンスが楽にできることが挙げられます。今回のECサイトの構築では、練習のために無償で利用可能なMySQLを使用していますが、現実のECサイトなどでは、長く運用している間に既存のデータベースからOracleなど別の製品に切り替えるということも起こり得ます。これまでは、データベース処理としてmysql_connectmysql_query命令などを使っていましたが、この命令はOracleデータベースでは使用できません。

mysql_connectやmysql_query命令はOracleデータベースでは使用不可能
mysql_connectやmysql_query命令はOracleデータベースでは使用不可能

 MDB2は、PHPとデータベースの中間に立ち、データベースの違いを吸収してくれます。MDB2を使うことで、データベース製品が変更になっても、PHPプログラムの変更を極力少なくできます。

MDB2がデータベースの違いを吸収
MDB2がデータベースの違いを吸収

今までの記述方法との違い

 それでは、実際の例を見てみましょう。サンプルソースの「mdb2_sample.php」をC:\xampp\htdocs\ec\以下に置き、http://localhost/ec/mdb2_sample.phpにアクセスしてください。このプログラムは、データベースm_itemsからレコードを取得し、画面に表示します。このプログラムは以下のSQLを実行しています。

SELECT * FROM m_items WHERE category = 1 or category = 3

 画面での表示が確認できたら、メモ帳などで開いてみましょう。

 まず、プログラムの最初の方に、下記のような記述があります。

require_once("MDB2.php");

 ここで初めて登場しているrequire_onceという命令は、外部にあるファイルを読み込むための命令です。MDB2ライブラリを使用するために、「MDB2.php」というファイルを読み込んでいます。ファイルの実体はC:\xampp\php\PEAR\MDB2.phpにあります。

 次に、下記のような記述があります。

PEAR::setErrorHandling( PEAR_ERROR_CALLBACK, 'handleError' );
function handleError( $error )
{
    die('エラーが発生しました。管理者までお問い合わせ下さい。');
}

 これはエラー処理を記述しています。エラーが発生すると「エラーが発生しました。管理者までお問い合わせ下さい。」というメッセージを表示し、処理を中断します。これまでの記事では、データベース接続やSQL実行のたびにエラー処理をif文で記述していましたが、MDB2を使うことで毎回エラー処理を記述する必要がなくなります。

 function…で始まるブロックは「関数」と呼ばれるものですが、関数の説明はここでは割愛します。関数より後の処理は、これまで記述したプログラムにどこか似ているように感じたかと思います。

 下記の表は、これまで使用してきた命令とMDB2での命令の対応表です。

これまでのプログラムで使用した命令とMDB2での命令との対応表
これまで使用してきた命令
(MySQL専用)
MDB2に置き換えた命令
(MySQL以外にも使用可)
mysql_connect MDB2::connect
mysql_set_charset $mdb2->setCharset
mysql_query $mdb2->prepare および $stmt->execute
mysql_fetch_array $res->fetchRow
mysql_free_result $res->free

 connect命令やquery命令は、MDB2ライブラリ独自の命令です。従って、命令の前にコロン2つ(::)や矢印記号(->)を付け、MDB2::connectなどの表記をする必要があります。

 SQLを実行しているのは、$mdb2->prepare$stmt->execute命令です。

mdb2_sample.phpのSQL文実行カ所
$stmt = $mdb2->prepare( "SELECT * FROM m_items WHERE category = ? or category = ? " );
$res = $stmt->execute( array( "1", "3" ) );

 $mdb2->prepare命令では、変数などを埋め込みたい箇所をクエスチョンマークで表現します。その後、$stmt->execute命令に、?の箇所に指定したい変数をカンマ区切りで順番に指定します。1つ目の?に「1」という文字を、2つ目の?に「3」という文字を指定したい場合はサンプルの通り、

$res = $stmt->execute( array( "1", "3" ) );

 と記述します。しかしこれでは「1」と「3」という固定の文字しか指定できないためあまり意味はありません。実際には

$res = $stmt->execute( array( $_REQUEST["category_a"], $_REQUEST["category_b"] ) );

 のように、変数を指定します。

次のページ
MDB2を利用したプログラムのブラッシュアップ

修正履歴

この記事は参考になりましたか?

プログラミング未経験から始めるPHP入門連載記事一覧

もっと読む

この記事の著者

大家 正登(オオイエ マサト)

デジタルハリウッド『PHP 講座』講師。学生時代、スペイン語を専攻していたものの何故かプログラム言語に心が傾き、近所のフリープログラマーに弟子入り修行。その後中堅 SIer に 3 年間所属し、現在はフリーエンジニア。仕事の傍らジャズを演奏し、コントラバス 2 台と同居中。(ITエンジニア・大家正登のWeb...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4204 2010/11/16 11:56

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー