はじめに
前回からシリーズでお送りしている「PHPからMicrosoft SQL Serverを使おう!」、第2回目は、PHPコードからのMicrosoft SQL Server(以下 SQL Server)への接続についてです。
今回の記事では、マイクロソフトがPHP向けにリリースした、SQL Server Driver for PHPドライバーの入手とインストール、実際にPHPのコードからSQL Serverに接続するための方法について紹介させていただきます。
1 PHPコードからSQL Serverへの接続
1.1 PHPコードからSQL Serverへ接続するための手段
PHP 5.2までのPHPランタイムには、SQL Serverに接続するためのMssql関数(php_mssql.dll)が用意されており、アプリケーションはこれを使用してSQL Serverに接続することができましたが、Windows版のPHP 5.3以降のバージョンではサポートされない状態となっていました。
また、マイクロソフトからは、PHP 5.3以降のPHPでも使用可能なSQL Server 2005用のドライバーがリリースされましたが、UTF-8に絡む文字化けなどで、なかなか気軽に使用できるという状況ではありませんでした。
しかし、その後リリースされたSQL Server Driver for PHP Version 1.1では、これらの問題に対応し、さらには最新のVersion 2.0ではPDOがサポートされました。これにより他のデータベースサーバーとの相互運用性が格段に向上しています。
![図 : SQL Server Driver for PHP 1.1と2.0の構造比較](http://cz-cdn.shoeisha.jp/static/images/article/5736/5736_Driver_Structure.gif)
1.2 SQL Server Driver for PHPを使用するには
SQL Server Driver for PHPを使用するには、(1)ドライバーのファイルを入手し、(2)PHPランタイムのエクステンションに配置して、(3)php.iniファイルに設定を追加する、という一連の作業を行います。
これらの作業は、一般的なPHP拡張を追加する手順と同じです。
SQL Server Driver for PHPからインストールまでの具体的な手順は以下の通りです。
- ダウンロードセンターよりMicrosoft Drivers for PHP for SQL Serverをダウンロードします。
- ダウンロードしたファイル「SQLSRV20.EXE」をダブルクリックし、任意のフォルダに内容を解凍します。
- 解凍されたファイルから、使用しているPHPランタイムのバージョンと種類にあった*.dllを、PHPランタイムのextフォルダに配置します。
なお、解凍されたファイルには、PHP 5.2と5.3用の、スレッドセーフ、ノン・スレッドセーフ用の2つのsqlsrvドライバーと、PDOのドライバーのファイルが含まれています。ドライバーファイルがスレッドセーフなものであるか否かの判断は、ファイル名に含まれる文字、ts(Thread Safe)かnts(Non Thread Safe)かで行います。
![図 : SQLSRV20.EXEに含まれるファイル](http://cz-cdn.shoeisha.jp/static/images/article/5736/5736_Incliding_dll.gif)
PHPのバージョンとファイルの対応についての詳細は、MSDNのドキュメント「System Requirements(Microsoft Drivers for PHP for SQL Server)」内の表をご参照ください。
- php.iniファイルにドライバーの参照情報を追加します。
PHPランタイム内にあるphp.iniファイルをテキストエディターでオープンし、様々なエクステンション(拡張)への参照が"extension="で記述してある箇所に以下のように記述を追加します。
extension=php_sqlsrv_53_nts_vc9.dll extension=php_pdo_sqlsrv_53_nts_vc9.dll
なお、php.iniファイルが存在しない場合は、php.ini-recommendedファイルをphp.iniにリネームして使用します。
以上でphp.iniファイルへの設定の追加は完了です。
PHPスクリプトファイルにphpinfo関数を記述して実行し、ドライバーが正しく組み込まれたか確認します。
正しく組み込まれていれば、phpinfo関数の結果に、以下のような設定が表示されます。
![図 : sqlsrvドライバーの情報](http://cz-cdn.shoeisha.jp/static/images/article/5736/5736_Info_sqlsrv_s.gif)
![図 : sqlsrv PDOドライバーの情報](http://cz-cdn.shoeisha.jp/static/images/article/5736/5736_Info_pdo.gif)