IISと連携したPHPからIBM Db2 Community Editionへの接続(完結編)
上記により準備されたデータベースに接続を行います。
データベース接続ファイルの準備
http://localhost/db_check_odbc.php
or
http://【IPアドレス】/db_check_odbc.php
として接続するファイルを作成します。同じファイルでOKです。
予期せぬ動作をした場合、IISのサーバー(ローカル環境)上で試みるとわかりやすいエラーが表示されることもあります。
<?php
//Error Output
ini_set('display_errors', "On");
//一時的な文字コードセットの変更
ini_set("default_charset", "SJIS");
$DatabaseName = "TESTDB";
$UserName = "Administrator";
$PassPhrase = "P@ssw0rd";
$ServerName = "odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=25000;DATABASE=" .$DatabaseName. ";PROTOCOL=TCPIP;";
try {
$DB_INFO = new PDO($ServerName, $UserName, $PassPhrase);
$DB_INFO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// $DB_INFO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e) {
die("Error connecting to ODBC_DSN [" .$e->getMessage(). "]");
}
echo "Connected to ODBC_DSN";
//データベース情報切断
$DB_INFO = null;
?>
データベースへの接続
コマンドプロンプトを使った接続
コマンドプロンプトで行う理由はIISの設定に不具合があることに気が付かず数時間悩み続ける人(←作者)が少しでも減れば・・・という思いからです。
管理者モードでコマンドプロンプトを起動します。
※Power Shellの場合はcmdと入力してコマンドプロンプトにしてください。
//PHPの起動プログラムがある場所に移動します。
> cd c:\PHP-NTS\8.1
//データベース接続ファイルを実行します。
> php c:\IIS\SITE\DefaultPage\db_check_odbc.php
Connect to ODBC_DNS
>
と表示されれば成功です。
Webを使った接続(成功への道筋)
では、同ファイルをブラウザから呼び出してみましょう。
[SQLSTATE[08004] SQLDriverConnect: -1092 [IBM][CLI Driver] SQL1092N このユーザー ID には要求されたコマンドまたは操作を実行する権限がないため、要求されたコマンドまたは操作が失敗しました。 ユーザー ID: "DEFAULTAPPPOOL"。 ]
[DEFAULTAPPPOOL]に権限が無いという理由で接続に失敗しました。
GUIの【ODBC データ ソース (64 ビット)】で作成したものを呼び出しても結果は同じです。
なお【SQL Server】ドライバを呼び出すと成功します。
実は先に記述した【IISと連携したPHPからSQL Serverへの接続(完結編)】でも気にはなっていたのですが、[DEFAULTAPPPOOL]って誰?
Webを使った接続(完結)
【インターネット インフォメーション サービス(IIS)マネージャー】を起動します。
(左側)アプリケーションプールを選択します。
【DefaultAppPool】を右クリックして【詳細設定】を選択します。
【プロセス モデル】⇒ID【ApplicationPoolIndentity】を変更します。
ビルトイン アカウントから選択するのが楽です。一番制限が強そうな【LocalService】を選択します。
http://localhost/db_check_odbc.php
に再接続します。
無事に接続が成功しました。
※エラーが出た場合は、Windows Serverを再起動してみるとよいかもしれません。
余談ですが[DEFAULTAPPPOOL]に権限を付与するのもOKです。というか王道である気もしますが、また次回(あるかは不明)ということでご容赦ください。
これで【IIS+PHP+IBM Db2】は終了です。
ご不明点・記載ミスなどありましたら、筆者までご連絡ください。
この記事が気に入ったらサポートをしてみませんか?