PHP で DB2 UDB にアクセスする (パート 2)

Table of Contents

PHP で DB2 UDB にアクセスする (パート 2)

チュートリアル前回のPHP/DB2に関するチュートリアルで述べたように、PHPはWebアプリケーションで広く使用されており、ほとんどのWebアプリケーションにはデータベースコンポーネントが含まれています。DB2データベース用のPHP拡張機能は、PHPスクリプトから特定の広く使用されているデータベースにアクセスできるようにします。

チュートリアルのこの部分では、DB2 拡張機能をインストールし、DB2 データベースをインストールし、データベース接続を作成し、データベース テーブルを作成し、データベースから結果セットを取得します。

PHP DB2拡張機能のインストール

PHP 5は複数のサーバーにインストールされている場合があり、ここではMS Windows上のApacheウェブサーバーで設定します。まず、PHP 5.1.4をダウンロードします。次に、PHPのzipファイルをインストールディレクトリ(例:C:/PHP)に解凍し、こちらからApache HTTP Server 2.0をダウンロードしてインストールします。

PATH環境変数に、PHP 5がインストールされているディレクトリ( C:/PHP )を追加します。C :/PHPディレクトリ内のphp.init-recommendedファイルをphp.iniに変更する必要があります。

次に、PHP 5.1.4用のPECLモジュールコレクションをここからダウンロードします(関連するPHPマニュアルもこちらから入手できます)。pecl -5.1.4- Win32.zipファイルを任意のディレクトリに解凍します。php_ibm_db2.dllをC:/PHP/extディレクトリにコピーします。

php.ini設定ファイルで、 を指定して拡張機能ディレクトリを設定する必要があります。次に、 php.iniextension_dir = "./ext"ファイルに次の行を追加して DB2 拡張機能を有効にします。

拡張子=php_ibm_db2.dll

Apache HTTPサーバーにPHP 5をインストールする必要があります。<Apache2>/conf/httpd.confファイルに以下を追加します。

# PHP 5の場合 LoadModule php5_module "C:/PHP/php5apache2.dll"
AddType application/x-httpd-php .php # php.iniへのパスを設定します
PHPIniDir "C:/PHP/"

<Apache2>はApache 2がインストールされているディレクトリです。デフォルトではC:/Program Files/Apache Group/Apache2です。PHP 5がC:/PHP以外のディレクトリにインストールされている場合は、PHPIniDirvalue,“C:/PHP/”をPHP 5がインストールされているディレクトリに置き換えてください。

httpd.confファイルを変更した後、Apacheウェブサーバーを再起動します。Apacheウェブサーバーで実行するPHPファイルをC:/Program Files/Apache Group/Apache2/htdocsディレクトリにコピーします。

DB2 UDBのインストール

DB2をインストールするには、まずDB2 ViperデータサーバーとDB2 Viperランタイムクライアントをダウンロードしてください(IBM IDの登録、またはPartnerWorldまたはdeveloperWorksのユーザーIDが必要です)。db2_v9_rc1_ese_win_32.zipファイルdb2_v9_rc1_rtcl_win_32.zipファイルを適切なディレクトリに解凍してください。

DB2 UDBをインストールするには、 C:\DB2\PE\image\setup.exeアプリケーションをダブルクリックします。IBM DB2セットアップ・ランチパッドで、「製品のインストール」リンクをクリックします。「次へ」をクリックします。DB2セットアップ・ウィザードが起動します。

「次へ」をクリックします。使用許諾契約に同意し、「次へ」をクリックします。インストールの種類を選択し、「次へ」をクリックします。インストールと応答ファイルの作成を選択し、「次へ」をクリックします。インストール先フォルダを選択し、「次へ」をクリックします。ユーザー名とパスワードを指定して、「次へ」をクリックします。

DB2 UDBインスタンス「DB2」がデフォルトのDB2インスタンスとしてリストされています。デフォルトのDB2インスタンスのサービス名とプロトコルは、「プロトコル」ボタンをクリックして設定できます。デフォルトのサービス名は「」db2c_DB2、デフォルトのポートは50000です。「次へ」をクリックします。「DB2ツールカタログの準備」フレームでデフォルト設定を選択し、「次へ」をクリックします。通知を設定し、「次へ」をクリックします。「 DB2オブジェクトに対するオペレーティング・システム・セキュリティの有効化」フレームでデフォルト設定を選択し、「次へ」をクリックします。「完了」ボタンをクリックしてデータベースをインストールします。

次に、サンプルデータベースを作成します。DB2INSTANCE「システムプロパティ」>「詳細設定」>「環境変数」を選択し、環境変数をDB2に設定します。DB2INSTANCE環境変数は、コマンドウィンドウで次のコマンドを実行して設定することもできます。

DB2INSTANCE=DB2 を設定します

次に、コマンド ライン プロセッサで次のコマンドを使用してデータベース マネージャーを起動します。

データベースマネージャーを起動する

データベース マネージャーは、コマンド ウィンドウで次のコマンドを使用して起動することもできます。

db2スタート

ファーストステップコンソールの「サンプルデータベースの作成」ボタンを使用してサンプルデータベースを作成します。サンプルデータベースは、コマンドウィンドウで次のコマンドを実行して作成することもできます。

db2sampl

次に、DB2 Viper ランタイムクライアントをインストールします。C :\DB2\RTCL\image\setup.exeをダブルクリックします。DB2 ランタイムクライアントのセットアップウィザードが起動します。

「次へ」をクリックします。ライセンス契約を選択し、「次へ」をクリックします。インストールタイプを選択し、「次へ」をクリックします。DB2製品がインストールされている場所を識別するDB2コピー名を設定し、「次へ」をクリックします。「インストール」をクリックすると、ランタイムクライアントがインストールされます。

接続の作成

このセクションでは、DB2のPHP拡張機能を使用してDB2 Viperデータベースへの接続を取得します。Apache WebサーバーでPHPスクリプトを実行します。PHPスクリプトファイルを作成しますdb2connection.php。まず、データベース、ユーザー名、パスワード、ホスト名、ポート番号の変数を定義します。以下のリストに示すように、データベースは「SAMPLE」、ホスト名は「localhost」、ポート番号は50000です。

$データベース = 'サンプル';
$user = 'db2';
$パスワード = 'db2admin';
$ホスト名 = 'localhost';
$ポート = 50000;

この関数を使用して、DB2 UDBデータベースへの接続を取得しますdb2_connect()。まず、DB2 UDBデータベースへの接続文字列を指定する必要があります。

$conn_string = “DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;” 。
“HOSTNAME=$hostname;PORT=$port; PROTOCOL=TCPIP;UID=$user;PWD=$password;”;

次に、関数を使用してDB2 UDBデータベースに接続しますdb2_connect()。関数は非永続的な接続を作成します。この接続は、関数が呼び出されたとき、または接続リソースがNULLに設定されたとき、あるいはPHPスクリプトが終了したときにdb2_connect()切断され、接続リソースが解放されます。db2_close()

データベースセッションが頻繁に作成および削除されると、PHPスクリプトのパフォーマンスが低下する可能性があります。多数のデータベース操作を実行する場合は、db2_pconnect()関数を使用して永続的な接続を取得してください。関数で取得したデータベース接続は、関数の呼び出しdb2_pconnect()時またはPHPスクリプトの実行後に閉じられることはなくdb2_close()、新しい接続が要求された場合、PHPは関数で取得した接続を再利用しますdb2_pconnect()

$connection = db2_connect($conn_string, '', '');

このdb2_connect()関数は、接続が成功した場合、DB2データベース接続リソースを返し、「接続に成功しました」というメッセージを出力します。データベース接続に失敗した場合は、適切な接続エラーメッセージがdb2_conn_errormsg()関数とともに出力される場合があります。

if ($connection) { echo "接続に成功しました。."."\n";
}
else { echo "接続に失敗しました。."."\n"; echo db2_conn_errormsg ($connection);
}

データベーステーブルの作成

このセクションでは、SAMPLE DB2データベーススキーマにデータベーステーブルを作成します。テーブルを作成するためのSQL文を定義しますCatalog

$createtable = "CREATE TABLE DB2.Catalog(CatalogId VARCHAR(25), Journal VARCHAR(25), Section Varchar(25), Edition VARCHAR(25), Title Varchar(45), Author Varchar(25))";

次に、関数を使用して SQL ステートメントを実行しますdb2_exec()

$result=db2_exec($connection、$createtable);

これによりデータベーステーブルが作成され、成功した場合は「データベーステーブルが作成されました」というメッセージが出力されます。データベーステーブルが作成されなかった場合は、db2_stmt_errormsg()関数とともにエラーメッセージが出力されます。

if($結果){
echo "データベーステーブルが作成されました。."."\n"; }
それ以外 {
echo "データベーステーブルが作成されていません。."."\n";
db2_stmt_errormsg() をエコーし​​ます。
}

テーブル行を追加する SQL ステートメントを定義します。

$addrow = "INSERT INTO DB2.Catalog VALUES('catalog1', 'IBM developerWorks', 'XML', '2006 年 1 月', 'XML データの管理: タグ URI', 'Elliotte Harold')";

次の関数を使用して SQL ステートメントを実行できますdb2_exec()

$result=db2_exec ($connection、$addrow);

これにより、データベース テーブルに行が追加され、成功した場合は「行が追加されました」というメッセージが出力されます。それ以外の場合は、 というエラー メッセージが出力されますdb2_stmt_errormsg()

if($結果){
echo "行が追加されました。."."\n";
}
それ以外 {
echo "行は追加されませんでした。."."\n";
db2_stmt_errormsg() をエコーし​​ます。
}

同様に、データベース テーブル Catalog に別の行を追加することもできます。

$addrow = "INSERT INTO DB2.Catalog VALUES('catalog2'、'IBM developerWorks'、'XML'、'2006 年 1 月'、'実践的なデータ バインディング'、'Brett McLaughlin')";
$result=db2_exec($connection,$addrow);

結果セットの取得

このセクションでは、PHPのDB2 UDB関数を使ってDB2 UDBデータベースから結果セットを取得します。まず、例えばCatalogテーブルのすべての行を選択するSQLクエリを定義します。

$select= "DB2.Catalogから*を選択します";

このSQLクエリを実行し、関数を使って結果セットを取得できますdb2_exec()。このibm_db2拡張機能は2種類のカーソルをサポートしています。順方向専用カーソルはデフォルトで、結果セットを行ごとに一方向に取得し、読み取り専用操作に適しています。スクロール可能なカーソルも使用できます。スクロール可能なカーソルは、データベースが変更されたときに結果セットを更新します。順方向専用カーソルを使用するには、以下の手順に従います。

$result = db2_exec($connection,$select);

スクロール可能なカーソルを使用する場合、db2_exec()関数は次のように使用されます。

$result = db2_exec($connection、$select、配列('カーソル' => DB2_SCROLLABLE));

SQLクエリの結果をHTMLテーブルに出力することができます。まず、テーブルのヘッダー行を出力します。

echo "<table><tr><td>カタログID</td
><td>ジャーナル</td><td>セクション</td
><td>版</td><td>タイトル</td
><td>著者</td></tr>";

次に、結果セットを反復処理し、db2_fetch_array()関数を使って行を取得します。関数で取得された行は、db2_fetch_array()列値の列挙配列で構成され、HTMLテーブルに出力されます。

while ($row=db2_fetch_array($result)) { echo "<tr><td>$row[0]</td>"; echo "<td>$row[1]</td>"; echo "<td>$row[2]</td>"; echo "<td>$row[3]</td>"; echo "<td>$row[4]</td>"; echo "<td>$row[5]</td></tr>"; }

最後に、関数を使用して接続を閉じますdb2_close()。ステートメントリソースは関数によって解放されdb2_free_stmt()、結果セットリソースはdb2_free_result()関数によって解放される可能性があります。関数db2_free_stmt()db2_free_result()関数が呼び出されない場合、ステートメントリソースと結果セットリソースはスクリプトの実行完了時に解放されます。

db2_close($接続);

ApacheウェブサーバーでPHPスクリプトを実行するには、PHPファイル をC:/Program Files/Apache Group/Apache2/htdocsdb2connection.phpディレクトリにコピーします。スクリプトは以下のとおりです。db2connection.php

<?php $database = 'SAMPLE';
$user = 'db2';
$パスワード = 'db2admin';
$ホスト名 = 'localhost';
$port = 50000; $conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" . "HOSTNAME=$hostname;PORT=$port; PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$connection = db2_connect($conn_string, '', ''); if ($connection) { echo "接続に成功しました。."."\n"; }
else { echo "接続に失敗しました。."\n"; echo db2_conn_errormsg ($connection); } $createtable = "CREATE TABLE DB2.Catalog(CatalogId VARCHAR(25), Journal VARCHAR(25), Section Varchar(25), Edition VARCHAR(25), Title Varchar(45), Author Varchar(25))"; $result=db2_exec($connection, $createtable); if($result){
echo "データベーステーブルが作成されました。."."\n"; }
それ以外 {
echo "データベーステーブルが作成されていません。."."\n";
db2_stmt_errormsg() をエコーし​​ます。
} $addrow = "INSERT INTO DB2.Catalog VALUES('catalog1', 'IBM developerWorks', 'XML', '2006年1月', 'XMLデータの管理: タグURI', 'Elliotte Harold')"; $result=db2_exec ($connection,$addrow); if($result){
echo "行が追加されました。."."\n";
}
それ以外 {
echo "行は追加されませんでした。."."\n";
db2_stmt_errormsg() をエコーし​​ます。
} $addrow = "INSERT INTO DB2.Catalog VALUES('catalog2', 'IBM developerWorks', 'XML', 'January 2006', 'Practical data binding', 'Brett McLaughlin')"; $result=db2_exec($connection,$addrow);
if($結果){
echo "行が追加されました。."."\n";
}
それ以外 {
echo "行は追加されませんでした。."."\n";
db2_stmt_errormsg() をエコーし​​ます。
} $select= "DB2.CatalogからSELECT *";
$result= db2_exec($connection,$select); if($result){
echo "結果セットが作成されました。."."\n";
}
それ以外 {
echo "結果セットは作成されませんでした。."."\n"; }
echo "<table><tr><td>カタログID</td><td>ジャーナル</td
><td>セクション</td
><td>版</td><td>タイトル</td
><td>著者</td></tr>"; while ($row=db2_fetch_array($result)) { echo "<tr><td>$row[0]</td>"; echo "<td>$row[1]</td>"; echo "<td>$row[2]</td>"; echo "<td>$row[3]</td>"; echo "<td>$row[4]</td>"; echo "<td>$row[5]</td></tr>"; } echo "</table>";
db2_close($接続); ?>

この PHP スクリプトを Web ブラウザーで実行するには、次の URL を使用できます。

http://localhost/db2connection.php

DB2 UDBデータベースへの接続が確立され、データベース内にテーブルが作成されます。db2connection.phpスクリプトの出力を図1に示します。

図 1 を表示します。db2connection.php からの出力です。

結論

PHP スクリプトは Web アプリケーションの開発を容易にし、DB2 UDB の PHP 5 拡張機能は便利なデータベース サポートを提供します。

PHP DB2拡張モジュールの代わりに、より汎用的なPDO拡張モジュールを使用することもできます。PDO拡張モジュールは、汎用的なデータベース接続を提供します。ただし、DB2データベース専用のPHP拡張モジュールは、汎用的なPDOソリューションに比べて、追加のデータベースアクセス関数(db2_procedures()、db2_statistics()、db2_tables()など)を提供します。また、PDO拡張モジュールを使用するデメリットとして、PHP 5より前のバージョンのPHPをサポートしていないことが挙げられます。

もちろん、DB2 は使用できるデータベースの 1 つに過ぎませんが、大規模な組織では広く使用されています (Martin Banks がここで指摘しているように、DB2 の無料バージョンも利用可能です)。

DB2 を使用する最大の理由は、おそらく、組織内ですでに使用されており、IT グループや DBA グループによって完全にサポートされていることですが、DB2 はそれ自体が非常に強力でスケーラブルなデータベースです (こちらの Mark Whitehorn を参照)。たとえば、長年にわたって実証済みの堅牢なトランザクション処理機能を備えています。

一方、Web アプリケーションで PHP を使用する主な動機は、この Netcraft の Web サーバー調査に示されているように、業界全体で PHP が広く受け入れられていることでしょう。しかし、PHP は多くの Web アプリケーションにとって軽量かつ柔軟なスクリプト言語です。

より伝統的な言語、あるいはアプリケーション ジェネレーター、あるいは MDA 環境が、回復力のある商用アプリケーションに適しているかどうかは、このチュートリアルの範囲外です。®

Discover More