PHPからSQLServerとOracleへの接続

インターネットの世界で発達したPHPですからMySQLを使うのが普通なのですが、仮にPHPが社内イントラネットの開発に使われる場合には、SQL Server、Oracle、Postgres、Accessなどの基幹システムのDBと接続することになります。

MicrosoftのWEB開発といえば.NETだったので、PHPとSQL Serverとの接続ドライバーのサポートが遅れていましたが、現在のドライバーMicrosoft Drivers for PHP for SQL ServerではPDO(PHP Data Object)をサポートするので、コネクションストリングの変更だけでPHPから接続できるようになりました。

PHPとMySQLとの接続

さて、PHPからMySQLに接続するためには拡張ディレクトリに拡張モジュールであるphp_mysql.dllが配置され、php.iniに拡張指定がある必要がありました。

拡張ディレクトリのパスはphp.ini(D:\xampp\php\php.ini)のextension_dirに定義されています。

PHPとSQL Serverとの接続

同じように、PHPからSQLServerに接続するにはMicrosoft Drivers for PHP for SQL Serverという拡張モジュール(ドライバー)のdllファイルが必要であり、PHPコードからはドライバーの関数(API)を呼び出してSQL文を実行します。

パッケージはPHPのバージョンによって以下のように分かれていますが、今回はWin7上のPHP5.6.3なのでSQLSRV32.EXEをダウンロードします。

SQLSRV32.EXE : PHP5.6
SQLSRV31.EXE : PHP5.5
SQLSRV30.EXE : PHP5.4

このパッケージを展開するとさらにPHPのバージョンごとのdllファイルが生成されますが、今回の環境はPHP5.6.3なので以下の2つを拡張ディレクトリに保存します。

スレッドセーフ(Thread Safe)か非スレッドセーフ(Non Thread Safe)かは、例のphpinfo()関数を書いたphpファイルを呼び出して以下の記述で確認できます。

thread safe

Apacheを再起動してPDOとSQL Serverのドライバーが読み込まれていれば以下の記述が確認できます。

PDO PHP Info

PHPINFO SQL Server

また下図のODBCとSQL Server間に別途ODBC driver 11 for SQL server x64が必要になります。

PDO

PHPとOracleとの接続

PHPからOracle DBを操作するにはOCI(Oracle Call Interface)というRDBMSのAPIを使用し、これはoci.dllとして実装されています。ですからまずはApache起動時にoci.dllがロードされる必要があるわけで、その拡張モジュールとしてphp_oci8_11g.dllがプロシージャーエントリーポイントでリンクします。

Winでは環境変数のpathにあるディレクトリのdllがロードされるため、pathに以下の記述が必要です。

Oracle Instant Clientは、標準のOracleクライアントなしでOracleクライアントとして接続できる環境を提供するものですが、Oracle ServerとPHP が同じマシンで動いている場合は、必要なライブラリはデータベースソフトウェアの中にすべて含まれているので必要ないです。要はOracleサーバーがあればOracle ClientもOracle Instant Clientも必要ないということですな。

Oracle 11gに接続するための拡張モジュールphp_oci8_11g.dllの5.6 Thread Safe (TS) x86をPECLから入手し、拡張ディレクトリに配置します。そしてphp.iniの拡張指定を行います(コメントアウトするだけ)。

Apacheを再起動するとOracleのドライバーが読み込まれていることが確認できます。
oci8

こんな投稿も読まれています