PHPでSQL Serverに接続したい
前提
SQL Serverと別にLinuxのWebサーバーがいて、その中のPHPからDBに繋ぎたい
- How-to: Linux talks to Microsoft SQL Server by PHP Data Objects (PDO) その2
- Memory Over:Connecting to SQL Server 2005 via unixODBC - livedoor Blog(ブログ)
を主に参考にした。
環境
DB : SQL Server 2005 Express Edition
Webサーバー : CentOS
step1 Windowsからリモートで接続できるかやってみる
SQL Server Management Studioを使う
pgAdminよりもすげー高級な統合環境。でも操作がよくわからない。
マイクロソフト公式ダウンロード センターから Microsoft SQL Server Management Studio Express をダウンロードからツールをダウンロードして使う。
ネットワーク上にSQL Serverがいれば、サーバーの接続画面のサーバー名のリストボックスの"参照"をクリックしてサーバーを探し出すことができる。
このとき
SQL ServerのインストールされているサーバーでSQL Server Browser*1というサービスが起動していると勝手に接続先のインスタンス名を取得できるのだが、サービスが動いていないときは手動でインスタンス名を入力しないといけない。
※SQL Express Editionならインスタンス名はSQLEXPRESSになる???
SQL Server 2005でネットワーク接続を有効にするには? − @ITを見ながらポートの設定を確認しておくとハマらなくてよい。
step2 LinuxのサーバーからODBCで接続する
FreeTDSの設定を行う
インストールはyumなりで行う。
freetds.conf
[任意のサーバー名] host = サーバーのIP port = サーバーのポート tds version = 9.0 charset = sjis client charset = UTF-8 language = english
のようにFreeTDSの設定を書く。tds versionはSQL Server2005なら9でよいらしい。
unixODBCの設定を行う
インストールは先ほど同様に省略。
odbcinst.ini
[FreeTDS] Driver = /usr/local/lib/libtdsodbc.so Description = 適当な説明
FreeTDSと書いたが、そこも任意の文字列。また、Driverで指定するライブラリのパスは個々に設定することになるだろう。
odbc.ini
[データソース名] Driver = FreeTDS(odbcinst.iniで書いたセクション名) Description = 適当な説明 ServerName = freetds.confで書いたサーバー名 Database = DB名
isqlでテスト
odbcのユーティリティのisqlで接続をしてみる。
isql データソース名 ユーザーID パスワード
で接続ができるはず。
ここで指定したユーザーにDBにアクセスする権限がないとうまくいかないときがある。
テストをするだけならば、DBのオーナーでアクセスすれば、成功するはず。
step3 PHP側の設定
PHPの再インストール
pecl install PDO_ODBC
とコマンドを打っても、うまくできなかったのでPHPの再インストールを行った。
PHP: ODBC and DB2 (PDO) - Manualの通り
--with-pdo-odbc=unixODBC,/usr/local
というオプションをつけて、インストールをしたらPDO_ODBCが使えるようになった。
phpinfoを実行したときに
PDO driversの項目の中にodbcとあればインストール成功。