裏紙に書く程度の内容

Windows PHP から sqlserverへ接続

Windows の PHP から Microsoft SQL Server へ接続する際のメモ書き。

※PHPのバージョンは 7.1.9.

PCを移行してxamppを入れなおし、ソースをコピーしていざ作業始めようって時に、CodeIgniterがエラーをはいた。

An uncaught Exception was encountered

Type: Error

Message: Undefined class constant 'SQLSRV_ENCODING_UTF8'

'SQLSRV_ENCODING_UTF8' がありませんよって。

そういえば旧作業環境ではなんかドライバ要れたような記憶がある。

でも入れ方とかきれいサッパリ忘れたのでこの機会にメモを残しておこう。

ドライバのダウンロード

以下からダウンロードします。

Download Microsoft Drivers for PHP for SQL Server from Official Microsoft Download Center

Downloadボタンをクリックするとダウンロードするバージョンを選択します。

PHPのバージョンとの対応は以下。

- Version 4.0 supports PHP 7.0+ on Windows and Linux
- Version 3.2 supports PHP 5.6, 5.5, and 5.4 on Windows
- Version 3.1 supports PHP 5.5 and 5.4 on Windows
- Version 3.0 supports PHP 5.4 on Windows

今回は PHP v7 なので 4.0をダウンロードします。

自己解凍のEXEファイルがダウンロードされるので任意の場所に展開します。

image

※php/ext/ に直接展開すると不要なファイル(readmeとか)も入ってくるのであまりお勧めしません。
いったん適当な場所に解凍し、必要なDLLだけ持ってくればいいと思います。

必要なファイルをコピー

解凍したファイルの中から必要なファイルを php/ext/ ディレクトリへ移動します。
xamppをデフォルトでインストールしたなら、”C:\xampp\php\ext\”ですね。

必要なのは php_pdo_sql_srv_... php_sqlsrv_...の2ファイルです。...以降の部分はバージョン番号と「ts/nts」、「x64/x86」となっているかと思います。

「ts/nts」は「スレッドセーフ/ノンスレッドセーフ」、
「x64/x86」はPCが 64ビット / 32ビット用です。

それぞれ必要なものをコピーしてextに格納します。

php.iniの修正

コピーしたら以下をphp.iniに書き込んで、再起動すればOK…

extension=php_sqlsrv_7_nts_x64.dll
extension=php_pdo_sqlsrv_7_nts_x64.dll

なはずが、動きません。phpinfo を見ても追加したはずのdllがロードされていないようです。

バージョンを再確認しようと

> php -v

を実行すると、、、

Warning: PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_sqlsrv_7_nts_x64.dll' - %1 は有効な Win32 アプリケーションではありません。

 in Unknown on line 0

 Warning: PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_pdo_sqlsrv_7_nts_x64.dll' - %1 は有効な Win32 アプリケーションではありません。

  in Unknown on line 0
  PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 )
  Copyright (c) 1997-2017 The PHP Group
  Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

「有効なWin32アプリケーションではありません。」ですと。

よく見るとバージョン情報自体も「x86」と記載されています。

どうやらxamppをインストールするとデフォルトの状態では32ビットのPHPがインストールされるようですね。

気を取り直して php.ini を書き換え

extension=php_sqlsrv_7_nts_x86.dll
extension=php_pdo_sqlsrv_7_nts_x86.dll

再度実行・・・・NGです。

今度は以下のようなダイアログメッセージ。

image

php7.dllがないんだって。

php/ ディレクトリをよく見るとphp7.dllはないけどphp7ts.dllがあるため、ntsじゃないほうにしてみて実行。

extension=php_sqlsrv_7_ts_x86.dll
extension=php_pdo_sqlsrv_7_ts_x86.dll

image

今度はcall_user_functionがどうのこうの・・・

なんやかんや調べてたら要は php 7.1なのでSQLSRV40.EXE内のdllはだめらしい。

結局以下ページの

[https://github.com/Microsoft/msphpsql/releases/]

Windows-7.1.zipのdllを使って

extension=php_sqlsrv_71_nts.dll
extension=php_pdo_sqlsrv_71_nts.dll

でOKってことでした。

公式のDLページには「Version 4.0 supports PHP 7.0+ on Windows and Linux」とか書いてあったのに!!!

URABLO
広告
Index
広告