概要: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までのパスを追加(これは必要かどうかはわからない)