PHP5 から Microsoft SQL Server 2005 Express を使う

はまったので、はまったところだけメモしておきます。

環境によって違う部分があると思います。私の場合の環境は、Windows XPIISPHP 5.2.4、Microsoft SQL Server 2005 Express Edition です。

ntwdblib.dll

PHP5 に同梱されている「ntwdblib.dll」は、バージョンが古く問題がある。


http://webzila.com/dll/1/ntwdblib.zip
↑ここからntwdblib.dllをダウンロードし、解凍してc:?windows?system32 と d:?php5 の両方にコピー。


phpパッケージに付属する ntwdblib.dll はバージョンが古く sqlserver 接続時にコネクションエラーが発生しますので新しいモノと差し替えておく必要があります。 ファイルバージョンが 2000.2.8.0 のモノは NG。2000.80.194.0 のモノは OK。

mssql_connect

mssql_connect('hostname\sqlexpress', 'id', 'password');

mssql_connect('127.0.0.1\sqlexpress', 'id', 'password');

とする必要があるようです。

nvarchar(max)、ntext に注意。

nvarchar(max)、ntext型にしたカラムを普通にSELECTしようとすると、
Unicode のみの照合順序の Unicode データまたは ntext データを、DB-Library (例 ISQL) または ODBC バージョン 3.7 以前を使用しているクライアントに送信できません。」
というエラーが出て取得できない。

nvarchar(255) や varchar(max)では問題ないようだ。

PHP側で対処するとすれば、SQL の CAST関数で型変換をかけることで、回避が可能。

SELECT CAST(contents AS TEXT) FROM contents_table;