PHPからSQL Serverに接続してDBを操作するのに必要だったファイルやソフトウェア、その他設定などについて覚書。
そこそこ面倒だったので、しっかり記録しておく。
必要な作業の概要
ざっくりとだけど、必要な作業は以下の通り。
- SQL Server関連のPHPの拡張モジュールのダウンロードとコピー
- php.iniで拡張モジュールをロードする記述を追記
- Webサーバー(apache、IIS)の再起動(OS再起動は不要)
- ODBCドライバのインストール
- サンプルプログラムを使った動作確認
拡張モジュールのダウンロードとコピー
まずは、PHPがSQL Serverに接続するために必要な拡張モジュールをダウンロードします。
拡張モジュールは、Microsoftの以下の公式ページからダウンロードできます。
ダウンロードした「SQLSRV59.EXE」(2021/10/20時点での最新版)をダブルクリック、[使用許諾契約]画面が表示されるので[Yes]をクリックします。
解凍先のフォルダを指定する画面が表示されるので[Browse...]をクリックします。
[フォルダー参照]画面が表示されるので、任意のフォルダを指定して[OK]をクリックします。
解凍先のフォルダを指定する画面にもどるので[OK]をクリック、解凍します。
解凍された中身を見ると、以下のように番号がついたファイルがたくさんあります。
このファイルの中からPHPが動作している環境に合わせたファイルを特定します。
PHPの動作環境に合わせた拡張モジュールの特定方法
必要なファイルの特定の方法は簡単です。
まずは、PHPの動作環境を確認するためにphpinfo()の結果を表示させましょう。
XAMPPを使っている場合は、[PHPInfo]をクリックすれば表示されます。
XAMPPではなく、普通にapacheやIISの場合は、Webサーバーのドキュメントルートなどブラウザから表示できる場所に以下のコードを書いたファイルを作成して保管してください。
<?
phpinfo();
?>
ファイル名は任意のファイル名で構いませんが、拡張子を必ず".php"にしてください。
ここではphpinfo.phpとします。
ファイルを作成、保管したらブラウザで作成したphpファイルを指定します。
例えば、「http://localhost/phpinfo.php」とか「http://IPアドレス/phpinfo.php」とか。
PHPが正しく動作している環境であれば、以下のような画面が表示されるはずです。
phpinfoの結果が表示されたら以下の情報を確認してください。
- PHPのバージョン
- Architecture(OSが32bit版か64bit版か)
- Thread Safety(enabled もしくは、disabled)
- extension_dirに記載されているパス
次にMicrosoftの「Microsoft Drivers for PHP for SQL Server のシステム要件」のページを開きます。
ダウンロードした「SQLSRV59.EXE」は、「Microsoft SQL Server 用 Drivers 5.9 for PHP」なので、このページの「ドライバーバージョン」で「Microsoft SQL Server 用 Drivers 5.9 for PHP」の表を見ます。
「PHPバージョン」列でphpinfoで確認したPHPのバージョンに該当する行を確認します。
上記の該当行で「スレッドセーフですか」列の値がphpinfoの「Thread Safety」確認した値、"enable"だった場合は"はい"、"disable"だった場合は"no"となっている行を確認します。
さらに「PHP.dllで使用」列を見てphpinfoで確認した「Architecture」の値(32bitか64bit)に該当する行を確認します。
最終的には1つの行に絞られるはずで、その行の「ドライバーファイル」列に記載されている2つのファイルが必要とする拡張モジュールのファイルになります。
例えば、私のPHPが動作している環境は以下のようになっています。
PHPバージョン | 7.4 |
Architecture | "x64"なので64bit |
Loaded Configuration File | C:\xampp\php\php.ini |
Thread Safety | "disabled"なので"No" |
extension_dir | C:\xampp\php\ext |
上記の環境に該当するファイルは、表の以下の2つのファイルになります。
- php_sqlsrv_74_nts.dll
- php_pdo_sqlsrv_74_nts.dll
ダウンロードして解凍したファイルの中からこの2つのファイルだけを使うことになります。
あとは使わないので削除して良いです。
拡張モジュールファイルのコピー
特定した2つのファイルをphpinfoで確認した「extension_dir」で指定されているディレクトリにコピーしてください。
私の環境では、「extension_dir」で指定されたパスが"C:\xampp\php\ext"だったのでここにコピーします。
php.iniの修正
phpinfoで確認した「Loaded Configuration File」で指定されたファイル"C:\xampp\php\php.ini"をメモ帳などのテキストエディターで開きます。
開いたファイルに以下の2行を追記します。
※dllファイル名は、コピーした2つのファイルのファイル名を指定してください。以下は私の環境での場合です。
extension=php_pdo_sqlsrv_74_ts_x64.dll
extension=php_sqlsrv_74_ts_x64.dll
記載する場所ですが、「Dynamic Extensions」と記載のある場所の下に「extension=」の記載が固まって記載されているところがあるので、そのエリアの一番下にでも追記してください。
追記したらファイルを上書き保存します。
Webサーバー再起動
最後にWebサーバーを再起動します。
OSを再起動する必要はないです。
XAMPPであれば、XAMPPのコントロールパネルを起動して[Stop]ボタンをクリックします。
下のボックスに「Status change detected: stopped」が表示されて[Stop]ボタンが[Start]ボタンに変わるので[Start]ボタンをクリックします。
下のボックスに「Status change detected: running」が表示されれば再起動完了です。
apacheであれば、コマンドなどでapacheだけ再起動します。
IISであれば、管理者モードでコマンドプロンプトを起動して以下のコマンドを実行すればよいです。
C:\WINDOWS\sytem32> iisreset
拡張モジュールがロードされているか確認
Webサーバーを再起動したら、もう一度phpinfoの画面をブラウザで開きます。
SQL Server用の拡張モジュールが正しくロードされていれば、phpinfoの結果画面に「pdo_sqlsrv」の記載が表示されているはずです。
また、「sqlsrv」セクションが表示されていて「sqlsrv support」が"enabled"と表示されているはずです。
ここまででPHP関連の設定は完了です。
ODBCドライバのインストール
SQL Serverに接続するためには、ODBCドライバが必要となるので、ダウンロードしてインストールしましょう。
2021/10/20現時点での最新はVersion.17で、以下のページからダウンロードができます。
OS(64bit/32bit)にあったファイルをドライバをダウンロードしてください。
流石にないかとは思いますが、もしPHPのバージョンが5.X系の場合は、「Microsoft ODBC Driver 11 for SQL Server」をインストールする必要があるので注意してください。
「Microsoft ODBC Driver 11 for SQL Server」は以下のページからダウンロードできます。
32bit版と64bit版のダウンロードができるのでOSに合ったドライバをダウンロードしてください。
ダウンロードされたファイルをダブルクリックしてインストール開始します。
[Microsoft ODBC Driver 17 for SQL Serverセットアップ]ウィザードが開始されますので[次へ]をクリックします。
[使用許諾契約書]画面が表示されるので[同意する]をオンにして[次へ]をクリックします。
[機能の選択]画面が表示されるので、そのまま[次へ]をクリックします。
[プログラム インストールの準備完了]画面が表示されるので[インストール]をクリックします。
[Microsoft ODBC Driver 17 for SQL Server のインストールの完了]画面が表示されるので[完了]をクリックします。
以上でインストールは終了です。OSの再起動も必要ありません。
動作確認
実際にPHPからSQL Serverのデータベースを操作できるか簡単なサンプルプログラムを使って動作確認をします。
テキストエディターを開いて新規に以下のコードを記載します。
<?php
$dsn = 'sqlsrv:server=localhost;database=Northwind';
$user = 'sa';
$password = 'password';
$dbh = new PDO($dsn, $user, $password);
$sql = "select * from Employees";
foreach ($dbh->query($sql) as $row) {
echo $row['FirstName'] . ' ' . $row['LastName'] . "<br>";
}
$dbh = null;
?>
「$dsn =」以降の記載は使用する環境に合わせて変更してください。
テキストエディターにコードを記載したら拡張子に"php"を指定して任意のファイル名で保存します。
ここでは、"northwind.php"とします。
作成した"northwind.php"をWebサーバーのドキュメントルートにコピーし、ブラウザで作成したphpファイルを指定します。
例えば「http://localhost/northwind.php」といった感じです。
このサンプルプログラムを実行するとWebサーバー(localhost)上にインストールされたSQL Serverのデータベース「Northwind」に接続し、「Employee」テーブルの全レコードから「FirstName」と「LastName」フィールドの値を取得してブラウザに一覧表示します。
実行結果はこんな感じです。
実行結果が正しく表示されれば、PHPからSQL Serverに接続してデータベースを操作するために必要なすべてが正しく行われたことになります。
Northwindデータベースについて
こういった動作確認をするためにちょっとしたサンプルデータベースがあると便利です。
私は、ずっと昔からサンプルデータベースとして「Northwind」データベースをいつも使っています。
Accessには標準でついていたりしますが、SQL Serverの場合は別途ダウンロードして作る必要があります。
「Northwind」デーベースの作成方法については、別の記事に記載していますのでそちらを参照してください。
まとめ
PHPからSQL Serverのデータベースを操作するために必要なことについて記事にしました。
私が実際にやろうとしたときに各情報がバラバラで複数のサイトを見ないとできなかったのが不便だったので、必要なすべてを記事にしました。
この先同じことをやる機会が増える予定で、そのときには絶対忘れているので覚書。
コメント