oci_new_connect
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_new_connect — 一意な接続を使って Oracle サーバーへ接続する
説明
oci_new_connect
( string $username
, string $password
[, string $connection_string
[, string $character_set
[, int $session_mode
]]] ) : resource
Oracle サーバーへの新規接続を確立し、ログオンします。
oci_connect() や oci_pconnect() と異なり、oci_new_connect() は接続をキャッシュしません。また、 常に新しくオープンされた接続ハンドルを返します。 これは、もしアプリケーションが 2 セットのクエリ間でトランザクション的な独立を必要とする場合に有効です。
パラメータ
username
Oracle のユーザー名。
password
username
のパスワード。connection_string
接続先の
Oracle インスタンス
。 [https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-E5358DEA-D619-4B7B-A799-3D2F802500F1 » Easy Connect 文字列]、tnsnames.ora
ファイルの接続文字列、あるいはローカルの Oracle インスタンス名を指定します。省略した場合、PHP は環境変数
TWO_TASK
(Linux) あるいはLOCAL
(Windows) とORACLE_SID
を用いて接続先のOracle インスタンス
を判断します。Easy Connect 方式を使うには、PHP を Oracle 10g 以降のクライアントライブラリとリンクさせる必要があります。Oracle 10g の Easy Connect 文字列の形式は [//]host_name[:port][/service_name] です。Oracle 11g 以降の場合は、この構文は [//]host_name[:port][/service_name][:server_type][/instance_name] となります。 Oracle 19c では、さらにオプションが追加されています。 タイムアウトや keep-alive の設定を含みます。詳細は Oracle のドキュメントを参照して下さい。 サービス名を調べるには、Oracle のユーティリティ
lsnrctl status
をデータベースサーバー上で実行します。tnsnames.ora
ファイルは Oracle Net のサーチパス上にあります。 サーチパスに含まれるのは/your/path/to/instantclient/network/admin
,$ORACLE_HOME/network/admin
,/etc
です。 もうひとつの方法として、TNS_ADMIN
を指定して$TNS_ADMIN/tnsnames.ora
を読み込ませることもできます。 ウェブデーモンにそのファイルの読み込み権限を与えておきましょう。character_set
Oracle クライアントライブラリが使う文字セットを指定します。 これは、データベースが用いる文字セットと一致させる必要はありません。 一致していない場合は、Oracle が最善を尽くしてデータベースの文字セットとの間の変換を行います。 文字セットによっては、この変換結果がうまく使えないこともあります。 また、変換にはそれなりの時間を要します。
省略した場合は、 Oracle クライアントライブラリは環境変数
NLS_LANG
の値をもとに文字セットを判断します。このパラメータを渡すことで、 接続に要する時間を短縮できます。
session_mode
このパラメータは PHP 5 (PECL OCI8 1.1) 以降で使え、
OCI_DEFAULT
、OCI_SYSOPER
そしてOCI_SYSDBA
といった値を指定することができます。OCI_SYSOPER
あるいはOCI_SYSDBA
を指定した場合は、 この関数は外部の証明書を使った特権接続の確立を試みます。 特権接続は、デフォルトでは無効になっています。有効にするには oci8.privileged_connect をOn
に設定しなければなりません。PHP 5.3 (PECL OCI8 1.3.4) 以降、
OCI_CRED_EXT
モードを使えるようになりました。 これは、Oracle に外部認証あるいは OS 認証を使うよう指示します。 どちらかをデータベースで設定しておかなければなりません。OCI_CRED_EXT
フラグを使えるのは、ユーザー名が "/" でパスワードが空のときだけです。 oci8.privileged_connect はOn
あるいはOff
のどちらでもかまいません。OCI_CRED_EXT
は、OCI_SYSOPER
あるいはOCI_SYSDBA
モードと組み合わせて使います。OCI_CRED_EXT
は、セキュリティ上の理由により Windows ではサポートされていません。
返り値
接続 ID、あるいはエラー時に false
を返します。
例
以下の例は、接続がどのように分割されるかを示すものです。
例1 oci_new_connect() の例
<?php// create table mytab (mycol number);function query($name, $c){ echo "Querying $name\n"; $s = oci_parse($c, "select * from mytab"); oci_execute($s, OCI_NO_AUTO_COMMIT); $row = oci_fetch_array($s, OCI_ASSOC); if (!$row) { echo "No rows\n"; } else { do { foreach ($row as $item) echo $item . " "; echo "\n"; } while (($row = oci_fetch_array($s, OCI_ASSOC)) != false); }}$c1 = oci_connect("hr", "welcome", "localhost/orcl");$c2 = oci_new_connect("hr", "welcome", "localhost/orcl");$s = oci_parse($c1, "insert into mytab values(1234)");oci_execute($s, OCI_NO_AUTO_COMMIT);query("basic connection", $c1);query("new connection", $c2);oci_commit($c1);query("new connection after commit", $c2);// 出力:// Querying basic connection// 1234 // Querying new connection// No rows// Querying new connection after commit// 1234 ?>
パラメータの使いかたについては、oci_connect() の例も参照ください。