TechNote

事務屋のおぼえがき

PHPからODBC経由でoracleデータベースへ接続するための記述

単純な接続方法だが、意外にハマったのでメモを残す。


1.COMを使った接続方法(ADODB)
2.odbc_connectを使った接続方法


1.COMを使った方法(ADO)

    mb_language( "ja" );
    mb_internal_encoding("UTF-8");

    $cn = new COM( "ADODB.Connection" );
    $cn->CursorLocation = 3;
    $rs = new COM( "ADODB.Recordset" );

    $ConnectionString = "Provider=MSDASQL;" .
        "Driver={Microsoft ODBC for Oracle}" .
        ";SERVER=srv001" .
        ";UID=test" .
        ";PWD=test" .
        ";";

    $cn->Open( $ConnectionString );

    $query = "select * from M_STAFF";

    $rs->Open( $query, $cn );
    while( !$rs->EOF ) {
        echo "{$ret['staffcode']}";

        //ワークテーブルへインサート
        $query = "update W_STAFF set staffcode = '{$ret['staffcode']}'";
        $cn->Execute( $query );

        $rs->MoveNext();
    }

    $rs->Close();
    @$cn->Close();

ちなみにoracleドライバを使用するときは下記のように文字列を変更する。

$ConnectionString = "Provider=MSDASQL;" .
    ";Driver={Oracle in OraClient11g_home1}" .
    ";DBQ=test" . 
    ";UID=test" .
    ";PWD=test" .
    ";";
接続文字列の指定方法
  • Provider : OLEDBプロバイダ名
  • Data Source : 接続するデータベース
  • User ID : ユーザー名
  • Password : パスワード
OLEDBプロバイダの指定方法
  • Jet4.0 (Access2000以降) : Provider=Microsoft.Jet.OLEDB.4.0
  • SQL Server : Provider=SQLOLEDB
  • Oracle : Provider=MSDAORA
  • ODBC 経由 : Provider=MSDASQL

ちなみに今回、上記のMicrosoftODBCforOracleの方法を試したところ、ページを表示した段階でPCがフリーズを繰り返した。

原因がわからなかったため、接続方法を下記のように変更することに。


2.odbc_connectを使った方法

$db=odbc_connect("Driver={Microsoft ODBC for Oracle};Server=test;UID=test;PWD=test;","test","test");
$query="select * from M_STAFF";
$result=odbc_exec($db,$query);

while(odbc_fetch_row($result)){
echo odbc_result($result,2)."
";
}

odbc_close($db);


正常に接続できた。

あわせて読みたい

PHPでMaximum execution time of 60 seconds exceededのエラー - TechNotePHPでMaximum execution time of 60 seconds exceededのエラー - TechNote

Maximum execution time of 60 seconds exceededが出てプログラムが終了する場合はphp.iniにて下記を書き換える。時...

PHP+ACCESSでの文字化けについて - TechNotePHP+ACCESSでの文字化けについて - TechNote

Accessとの入出力は全てShift-JISになる。ほとんどの場合、結果取得やデータ更新時は文字エンコードが必要。テーブルより取得したデータを画面表示する前$...

PHPからAccessデータベースの使用 - TechNotePHPからAccessデータベースの使用 - TechNote

PHPからAccessのデータベース(mdb)を利用するにはODBC経由での接続が必要。ODBCの設定手順1.「コントロールパネル」→「管理ツール」→「データソ...

プログラムで簡単理解! 7つの超重要な整列アルゴリズム(ソートアルゴリズム)まとめ - TechNoteプログラムで簡単理解! 7つの超重要な整列アルゴリズム(ソートアルゴリズム)まとめ - TechNote

基本情報技術者試験や応用情報技術者試験の時期も近まった今、あらためて整列アルゴリズムをまとめてみたので、忘備録を兼ねてメモを残します。即席コードも併せて記載しま...


基礎からのOracle (DVD付) (プログラマの種シリーズ)

基礎からのOracle (DVD付) (プログラマの種シリーズ)

新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)

新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)