PHP5 から Microsoft SQL Server 2005 Express を使う
はまったので、はまったところだけメモしておきます。
環境によって違う部分があると思います。私の場合の環境は、Windows XP、IIS、PHP 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;