トップへ(mam-mam.net/)

PHPからPDO経由でOracleに接続する

検索:

「PHPからPDO経由でOracleに接続する」

PHPからPDO経由でSID又はネットサービス名を使ってORACLEに接続するにはどうするか。
.../client/network/admin/tnsnames.ora
の設定の仕方はどうするか。
tnsnames.oraを使わないで接続するには。

回答

■tnsnames.oraファイルの設定
・SID接続の場合
ネットサービス名=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=接続先ホスト)(PORT=1521))(CONNECT_DATA=(SID=接続SID名)))
・サービス接続の場合
ネットサービス名=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=接続先ホスト)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=接続サービス名)))

(例)
MYDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=LOCALHOST)(PORT=1521))(CONNECT_DATA=(SID=mydb)))
MYDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=mydb)))

■sqlplusからの接続
・sqlplusでネットサービス名で接続
sqlplus ユーザー名/パスワード@ネットサービス名
・sqlplusでSID接続(tnsnames.oraを使用せず接続)
sqlplus ユーザー名/パスワード@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=接続先ホスト)(PORT=1521))(CONNECT_DATA=(SID=接続SID名)))
・sqlplusでサービス接続(tnsnames.oraを使用せず接続)
sqlplus ユーザー名/パスワード@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=接続先ホスト)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=接続サービス名)))

(例)
sqlplus user/pass@MYDB
sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=LOCALHOST)(PORT=1521))(CONNECT_DATA=(SID=mydb)))
sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=mydb)))

ソース

//PHPのPDOでtnsnames.oraに設定されたネットサービス名で接続
$db = "oci:dbname=ネットサービス名";
$conn = new PDO($db,'ユーザー名','パスワード');
$stmt = $conn->exec("任意のSQL文");

//PHPのPDOでSID接続(tnsnames.oraを使用せず接続)
$tns = "oci:dbname=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=接続先ホスト)(PORT=1521))(CONNECT_DATA=(SID=接続SID名)))";
$conn = new PDO($tns,'ユーザー名','パスワード');
$stmt = $conn->exec("任意のSQL文");

//PHPのPDOでサービス接続(tnsnames.oraを使用せず接続)
$tns = "oci:dbname=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=接続先ホスト)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=接続サービス名)))";
$conn = new PDO($tns,'ユーザー名','パスワード');
$stmt = $conn->exec("任意のSQL文");