2006年4月21日金曜日

LinuxのPHPからWindowsのMSSQLに接続する

仕事でLinuxサーバーのphpからWindowsサーバーのMS SQL Serverに接続するアプリを作る。というのをやりました。
というわけで、接続が確立するまでの手順をメモしておきます。さらっと書いてありますが、半日くらいつぶれました。

〓インストール〓
◆apache2.2.0インストール
~省略~

◆unixODBCインストール
# tar zxvf unixODBC-2.2.11.tar.gz
# cd unixODBC-2.2.11/
# ./configure --enable-gui=no
# make
# make install


◆libiconvインストール
# tar zxvf libiconv-1.9.2.tar.gz
# cd libiconv-1.9.2/
# ./configure
# make
# make install


◆freetds0.63インストール
# tar zxvf freetds-stable.tgz
# cd freetds-0.63/
# ./configure --enable-msdblib --prefix=/usr/local/freetds
# make
# make install


◆php5.1.2インストール
./configure --with-apxs2=/usr/local/apache2/bin/apxs \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-trans-sid \
--enable-mbregex \
--with-unixODBC \
--with-mssql=/usr/local \
--with-sybase=/usr/local \
--with-mysql


以上でインストール完了。
ちなみに後で気が付いたんだけど、mssql関数だけ使う(odbc関数を使わない)場合はunixODBCとlibiconvは必要ないらしい。

〓freetdsの設定〓
# vi /usr/local/etc/freetds.conf
[sqlserver]
port = 1433
tds version = 9.0

※MSSQL2005の場合はtds versionを9.0にする

〓接続テスト用スクリプト〓
ここではPEAR::DBを使ってますが、mssql_***関数を使っても普通に動きます。
(というか、PEAR::DBもmssql_***を使ってるみたいなのでどっちでも同じ)
<?php
require_once('DB.php');
$db = DB::connect("mssql://sa:password@192.168.1.100/MSSQLDB");
// エラーチェック
if(DB::isError($db)){echo"DB接続エラー : " . DB::errorMessage( $db ) . "<BR>";}
else{echo "DB接続成功 : " . $db->toString() . "<BR>";}
$sql = "select * from USER_T";
$rs = $db->query($sql);
while($row = $rs->fetchRow(DB_FETCHMODE_ASSOC))
{ echo $row[user_id] . " : " . $row[user_name] . "<br>"; }
exit;
?>


〓その他注意事項〓
普段MySQLを使い慣れてるので、MSSQLはやはり違和感があります。
あとSJISはいろいろと面倒。
特に今回はinsertとupdateのとき、文字列にダブルクオートが入ると文字化けする問題が発生して困りました。
php.iniのmagic_quote関係をいじってみてもうまくいかないので、最終的にhtmlspecialcharを使ってデータ格納前にダブルクオートを無理矢理&quot;に変換。そして表示するときは変換を戻す、という処理を加えてなんとか回避しました。。

〓参考〓
PukiWiki:http://planet-m.dip.jp/index.php?Linux%A4%C8PHP%A4%C7SQLServer%A4%F2%A4%A4%A4%B8%A4%EB
PHP-users ML:http://ns1.php.gr.jp/pipermail/php-users/2002-May/007554.html
PHPマニュアル MSSQL関数:http://php.mirror.netmonic.com/manual/ja/ref.mssql.php
PukiWiki(おさるさん):http://www.magic3.org/sarucast/index.php?PHP-SQL%20Server%C0%DC%C2%B3

2 件のコメント:

  1. PHPにおける文字化け

    1.Apacheでの設定(実行環境)

    返信削除
  2. […] 情報源: LinuxのPHPからWindowsのMSSQLに接続する « kawama.jp […]

    返信削除