読者です 読者をやめる 読者になる 読者になる

PHPで SQL Server 2012 Expressにつなごう

OS: Windows7
PHP: 5.4.25
上記から SQL Server 2012 Express に繋ぎます。(2014/04/01現在)

1.Microsoftのダウンロードセンターから

Microsoft Drivers 3.0 for PHP for SQL Server
http://www.microsoft.com/en-us/download/details.aspx?id=20098
をダウンロード。
2012Expressは 3.0でないと扱えない。だが2000は3.0では対応してない。
あと 3.0は PHPの5.3、5.4しか対応していない。

2.解凍して、PHPのエクステンションディレクトリにコピーする。

php.ini に extension_dir = の項目があるので念のため確認。
私の環境の場合、
extension_dir = "C:/Bitnami/redmine-2.5.0-0/php/ext"
※Bitnami便利すぎ!超応援してる!

3.php.ini にエクステンションを登録。
extension=php_pdo_sqlsrv_54_ts.dll
extension=php_sqlsrv_54_ts.dll

上記2行を追加。
追加したら、Apacheを再起動して phpinfo()で 「sqlsrv」の項目が増えているか確認。
最初、非スレッドセーフ版(php_sqlsrv_54_nts/php_pdo_sqlsrv_54_nts)を登録していたが、どうもドライバが組み込まれないのでスレッドセーフ版に変更したら無事組み込まれた。

4.Microsoft SQL Server 2012 Native Client のインストール。

http://www.microsoft.com/ja-jp/download/confirmation.aspx?id=29065
Microsoft SQL Server 2012 Native Client(sqlncli.msi)

SQL Serverの2012 Feature Packページに置いてある。
なんか 2008用のものも、x86用もx64用も どのインストールパッケージも 名前が sqlncli.msi で同じぽい。間違えないように注意。

これのインストールが終わってないと

[message] => This extension requires the Microsoft SQL Server 2012 Native Client. Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712
[message] => [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。

のようなエラーが出て接続できない。URLまで書いてくれてるのは親切で有り難いが これ英語サイトだよ。

5.接続テスト。
	//データベースのインスタンス名を指定
	$serverName = "192.168.12.45,1433";

	//接続情報を指定
	$connectionInfo = array("UID"=>"sa",
			"PWD"=>"p@ssword",
			"Database"=>"targetdatabase",
			"CharacterSet"=>"UTF-8"); 
	$conn = sqlsrv_connect( $serverName, $connectionInfo);

	if( $conn ) {
		echo "Connection established.
"; }else{ echo "Connection could not be established.
"; die( print_r( sqlsrv_errors(), true)); }

繋がった!

	$sql = "SELECT * from M_費用;";
	$result = sqlsrv_query($conn, $sql);
	$row = sqlsrv_fetch_array($result);
	print_r($row);

これ、項目名が Shift-JISで返ってきてるよ。CharacterSetの指定でコンバートされるの データだけか。Shift-JISか。Shift-JISですかー。