4
9

More than 5 years have passed since last update.

【PHP】Oracle DBへの接続

Posted at

概要:Oracle DBへ接続するPHPアプリケーション

ソースコード

<?php


    try {
        // tnsnames.oraの内容
        $tns = "
            (DESCRIPTION =
                (ADDRESS = (PROTOCOL = TCP)(HOST = {ホスト名})(PORT = 1521))
                (CONNECT_DATA =
                    (SERVER = DEDICATED)
                    (SERVICE_NAME = XE)
                )
            )";

        // DB接続
        $db = new PDO('oci:dbname='.$tns,'{ユーザID}', 'パスワード');
        print '---------------DB接続成功------------------</br>';

        // DBクローズ
        $conn = null;

    } catch (PDOException $e) {
        print "ERROR: " . mb_convert_encoding($e->getMessage(),"UTF-8","SJIS") . "\n";
        die();
    }
?>

作業環境

  • OS : Windows 10 64bit
  • DB : Oracle Express Edition 11.2.0.2.0 64bit production
  • PHP: 7.1.8
  • XAMPP Control Panel V3.2.2
  • instantclient-basic-nt-12.2.0.1.0.zip(32bit版)

Try & Error

● ociによる接続
Fatal error: Call to undefined function oci_connect() in エラー部分の行数

● PDO接続
PDO Exception could not find driver
⇒dllがみつからない
● php.iniの編集
● extension=php_oci8_12c.dll の";"を除去し、設定を有効にした
● extension=php_pdo_oci.dllの";"を除去し、設定を有効にした
● oracle instant client(64bit)をダウンロードし、phpフォルダへdllをコピー
● XAMPPによるApache再起動後、php再実行
● Windowsの環境変数pathにdllまでのパスを追加
⇒エラーは解消されず

● oracle instant client64bitをダウンロードして解凍し、phpフォルダ、phpフォルダ\extにコピー
⇒エラーは解消されず

● oracle instant clientの32bitを、phpフォルダ、phpフォルダ\extにコピー
⇒これでdllがみつからない、のエラーが消えた

● ERROR: SQLSTATE[HY000]: pdo_oci_handle_factory: ORA-12560: TNS:protocol adapter error (ext\pdo_oci\oci_driver.c:640)
⇒接続文字列が正しくなかった。

● Warning: Uncaught PDOException: SQLSTATE[42S02]: pdo_oci_handle_factory:
ORA-12154: TNS:could not resolve the connect identifier specified (ext\pdo_oci\oci_driver.c:640)
⇒接続文字列が正しくなかった。

● 接続文字列を修正
⇒接続成功

まとめ

  • php.iniの編集
  • oracle instant client32bitをphp\extフォルダにコピー
  • Windowsの環境変数pathにdllまでのパスを追加(これは必要かどうかはわからない)
4
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
9