PHP7でSQLServerに接続する設定


# 経緯
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)](http://robsphp.blogspot.jp/2012/06/unofficial-microsoft-sql-server-driver.html) 

そして今回は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で[公開している](https://github.com/Azure/msphpsql)。
[PHP7用のリリースの状況](https://github.com/Azure/msphpsql/releases)を確認すると2016年1月からテスト的に公開して、2016年7月7日にリリースバージョン(4.0.6)となった模様。

# 必要条件の確認
[マイクロソフトのダウンロードページ](https://www.microsoft.com/en-us/download/details.aspx?id=20098)で必要条件を確認する。
## 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などのよく見るバージョン式

ちょいちょい調べる事があるのでここでメモ的に残しておく。[公式のページ](https://support.microsoft.com/ja-jp/kb/321185)

## 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
https://www.microsoft.com/en-us/download/details.aspx?id=36434
### 対応する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
https://www.microsoft.com/en-us/download/details.aspx?id=50420
### 対応する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系を実装して問題無いか確認する。


以上です。ではでは。