経緯
WindowsサーバからPHPでSQLServerに接続する時に、PHPのSQLServer用エクステンションを使用する必要がある。
以前PHP5.6からSQLServer2005に接続した時はMicroSoft公式のエクステンション(dllファイル)を使用しても認識しない問題があった。
結局その時は以下のリンク先の非公式エクステンションを使用してなんとか乗り切った。Robさんマジ感謝。
Rob's Area for PHP on Windows: Unofficial Microsoft SQL Server Driver for PHP (sqlsrv)
そして今回はPHP7からSQLServer2005へ接続する必要がでた。
上の非公式エクステンションを作成していたRobさんは「PHP7の対応はマイクロソフトが公式でリリースするよ」的なコメントを上記リンクの下の方で出している。
本番環境で使用するには、まだ涸れていない感じがプンプンするが、背は腹にかえられぬ調べて試した。
環境
Webサーバ
- OS:Windows Server 2012R2
- Apache:2.4.23
- PHP:7.0.9
DBサーバ
- SQLServer:2005(service pack2):9.00.304
結論
マイクロソフト公式のエクステンションで使用できる
Microsoft Drivers for PHP for SQL Server
PHP用のエクステンションの事。
今回調査して知ったがgit hubで公開している。
PHP7用のリリースの状況を確認すると2016年1月からテスト的に公開して、2016年7月7日にリリースバージョン(4.0.6)となった模様。
必要条件の確認
マイクロソフトのダウンロードページで必要条件を確認する。
OS
- Windows 7
- Windows 8
- Windows 8.1
- Windows Server 2008 R2
- Windows Server 2008 Service Pack 2
- Windows Vista Service Pack 2
Windows Server 2012 R2は書いて無いが問題なかった。っていうか更新しろ。
ODBC
Version 4.0はMicrosoft ODBC11かODBC13が必要。
ODBCはWindows上でDB関連の操作をするのに必要なSDKらしい。
SQLServerバージョン対応
話は大分変わるが、SQLServerのバージョンは2種類ある。これがややこしいのでここで一度整理する。
- 2005などの年度式
- 9.00.304などのよく見るバージョン式
ちょいちょい調べる事があるのでここでメモ的に残しておく。公式のページ
2014
- SQL Server 2014 RTM : 12.0.2000.80
2012
- SQL Server 2012 Service Pack 1 : 11.00.3000.00
- SQL Server 2012 RTM : 11.00.2100.60
2008 R2
- SQL Server 2008 R2 Service Pack 2 : 10.50.4000.0
- SQL Server 2008 R2 Service Pack 1 : 10.50.2500.0
- SQL Server 2008 R2 RTM : 10.50.1600.1
2008
- SQL Server 2008 Service Pack 3 : 10.00.5500.00
- SQL Server 2008 Service Pack 2 : 10.00.4000.00
- SQL Server 2008 Service Pack 1 : 10.00.2531.00
- SQL Server 2008 RTM : 10.00.1600.22
2005
- SQL Server 2005 Service Pack 4 : 9.00.5000.00
- SQL Server 2005 Service Pack 3 : 9.00.4035
- SQL Server 2005 Service Pack 2 : 9.00.3042
- SQL Server 2005 Service Pack 1 : 9.00.2047
- SQL Server 2005 RTM : 9.00.1399
ODBC
WindowsからSQLServerへ接続する為に必要
2種類ある。SQLServerとWindowOSのバージョンによって使用するバージョンを判断する
ODBC Driver 11
対応するWindows
- Windows 7
- Windows 8
- Windows Server 2008 R2
- Windows Server 2012
- Windows Vista Service Pack 2
対応するSQLServer
- SQL Server 2005
- SQL Server 2008
- SQL Server 2008 R2
- SQL Server 2012
- SQL Server 2014
ODBC Driver 13
対応するWindows
- Windows 10
- Windows 7
- Windows 7 Service Pack 1
- Windows 8
- Windows 8.1
- Windows Server 2008 R2
- Windows Server 2008 R2 SP1
- Windows Server 2012 R2
対応するSQLServer
- SQL Server 2008
- SQL Server 2008 R2
- SQL Server 2012
- SQL Server 2014
- SQL Server 2016
今回自分はSQLServer的にODBC Driver 11を使用する
インストールと設定
確認1
phpinfo()を確認
sqlsrvが無い事を確認する
ファイルの移動
ダウンロードした以下のファイルをWebサーバへアップ
- SQLSRV40.exe
- msodbcsql.msi
ODBCのインストール
msodbcsql.msiを実行。
インストーラが立ち上がる。
すべてデフォルトでインストール
エクステンションの解凍
SQLSRV40.exeを実行。
解凍先を同一ディレクトリに指定して実行。
dllファイルが出来る
ファイルの移動
以前はスレッドセーフを使っていたので、今回もそれに合わせる。ここは自分の使用するものに合わせて変える。
x64のts系2つを「C:PHP\ext」に移動。
- php_pdo_sqlsrv_7_ts_x64.dll
- php_sqlsrv_7_ts_x64.dll
.iniファイルの更新
php.iniに以下を追加。当然dllファイル名は自分の使用するものに合わせる。
- extension=php_sqlsrv_7_ts_x64.dll
- extension=php_pdo_sqlsrv_7_ts_x64.dll
必要なら以下も追加
- extension_dir = "C:\PHP\ext"
アパッチを再起動
確認2
phpinfo()を確認
sqlsrvが12個ある事を確認
sqlsrvの実行
後はPHPファイルでsqlsrv系かpdo_sqlsrv系を実装して問題無いか確認する。
以上です。ではでは。