💻

IIS上にPHPをインストールして.mdbファイルに接続する

2024/08/20に公開

みなさんはIISをご存じでしょうか?
IISは「Microsoft Internet Information Services」の略で、
Windows用のwebサーバーソフトのことです。

webサーバソフトといえば有名どころではApacheやnginxがありますよね。

先日私はとある事情でIIS上にPHPをインストールして、
.mdb形式のデータベースに接続することになったのでそのやり方を今回まとめます。

自分の備忘録兼、あまりいないと思いますが同じ用件で困っている方の助けになればと思います。

【バージョン】
IIS:10.0.22621.4162
MS Access: Microsoft® Access® for Microsoft 365 MSO (バージョン 2407 ビルド 16.0.17830.20166) 64 ビット
PHP: 8.2.20 nts 64bit
Windows11

注意点

ホストPCとMS AccessとPHPのbit数を一致させないと、
上手くデータソースをPHPが認識できない可能性が高いのでbit数は64, 32のいずれかで統一してください。

IISの有効化をする

https://mztm.jp/2017/10/12/windows10iisphp/
IISはWindowsに初めからインストールされているので別途インストールする必要はありません。
↑の記事のとおりにIISとPHPの設定、vc_rezistのインストールをしていただければ大丈夫です。
アクセス権限もこの通りにやっていただければOKです。

私の場合、インストールしたいPHPがアーカイブされていたので、
https://windows.php.net/downloads/releases/archives/
こちらのページからPHP 8.2.20 nts 64bitのzipをダウンロードしました。

vc_rezistはお使いのPCのbit数に合わせてください。

access database engineのインストール

https://www.microsoft.com/ja-jp/download/details.aspx?id=54920
こちらのページからPCのbit数にあったファイルをダウンロードしてexeファイルを実行してください。

インストール出来たら、
コントロールパネルのプログラムと機能の一覧に Microsoft Database Engineが追加されていることを確認してください。
もしかしたらインストール直後は表示されてないかもしれませんが大丈夫です。

.mdbへの接続をしてみる

上記の設定で.mdbへの接続をするための設定は完了しました。
ここからはODBCデータソースアドミニストレータでデータソースを作成して接続してみましょう。

Windowsキーを押して、ODBCデータソースを開いてください。
私は64bitのものを使用します。

システムDSNを作成したいので、
システムDSNタブを選んだ後、
Microsoft Access Driver (*.mdb, *accdb)を選択してダブルクリックしてください。

任意の名前でデータソースを作成してください。
私はaccessという名前で作成しました。

データベースも任意のものを選択してください。
私は、C:\Users\Public\Database1.mdbを選択しました。

データベースの中身は、id, username, passwordカラムがあるtestテーブルがあり、
その中に1レコードがあるだけです。

システムDSNを選んだのは、ユーザーDSNだとそのDSNを作成したユーザーしか使用できないようなので接続できない可能性があるからです。
またデータベースのファイルも権限的に開けない場合もあるので、共有ディレクトリに置くことをお勧めします。

ここからPHPでデータベースに接続していきます。

dsn, username, passwordをodbc_connect関数の引数に入れて接続します。

以下のコードを記載したファイルをC:\inetpub\wwwroot以下に保存してください。

connect.php
<?php 
$DSN        = "access";    //データソース名 
$DBUSER     = "";             //ログインユーザー名 
$DBPASSWORD = "";             //パスワード 
//Accessデータベースに接続 
$con = odbc_connect($DSN, $DBUSER, $DBPASSWORD); 
if ($con) { 
    echo "Accessデータベースに接続しました!<br>"; 
} else if(!$con){ 
    echo "Accessデータベースに接続できませんでした!<br>"; 
    echo mb_convert_encoding(odbc_errormsg(), 'UTF-8', 'SJIS-win'); 
} 
$sql = 'SELECT * FROM test'; 
$exec = odbc_exec($con, $sql); 
if($exec) { 
    echo 'クエリが叩けたよ' . "<br>"; 
} 
$id = odbc_result($exec, 'ID'); 
$username = odbc_result($exec, 'username'); 
$password = odbc_result($exec, 'password'); 
echo $id . "<br>"; 
echo $username . "<br>"; 
echo $password . "<br>"; 

↑のコードではselect文を叩いて
画面にid, username, passwordを表示しています。
では、localhostで確認してみましょう。
IISを立ち上げることを忘れないでください。
以下のように表示されていればOKです!

Discussion