OCI8 関数
PHP Manual

oci_new_connect

(PHP 5, PECL OCI8 >= 1.1.0)

oci_new_connect一意な接続を使って Oracle サーバーへ接続する

説明

resource oci_new_connect ( string $username , string $password [, string $connection_string [, string $character_set [, int $session_mode ]]] )

Oracle サーバーへの新規接続を確立し、ログオンします。

oci_connect()oci_pconnect() と異なり、oci_new_connect() は接続をキャッシュしません。また、 常に新しくオープンされた接続ハンドルを返します。 これは、もしアプリケーションが 2 セットのクエリ間でトランザクション的な独立を必要とする場合に有効です。

パラメータ

username

Oracle のユーザー名。

password

username のパスワード。

connection_string

接続先の Oracle インスタンス» 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 のユーティリティ lsnrctl status をデータベースサーバー上で実行します。

tnsnames.ora ファイルは Oracle Net のサーチパス上にあります。 サーチパスに含まれるのは $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_DEFAULTOCI_SYSOPER そして OCI_SYSDBA といった値を指定することができます。OCI_SYSOPER あるいは OCI_SYSDBA を指定した場合は、 この関数は外部の証明書を使った特権接続の確立を試みます。 特権接続は、デフォルトでは無効になっています。有効にするには oci8.privileged_connectOn に設定しなければなりません。

PHP 5.3 (PECL OCI8 1.3.4) 以降、 OCI_CRED_EXT モードを使えるようになりました。 これは、Oracle に外部認証あるいは OS 認証を使うよう指示します。 どちらかをデータベースで設定しておかなければなりません。 OCI_CRED_EXT フラグを使えるのは、ユーザー名が "/" でパスワードが空のときだけです。 oci8.privileged_connectOn あるいは Off のどちらでもかまいません。

OCI_CRED_EXT は、 OCI_SYSOPER あるいは OCI_SYSDBA モードと組み合わせて使います。

OCI_CRED_EXT は、セキュリティ上の理由により Windows ではサポートされていません。

返り値

接続 ID、あるいはエラー時に FALSE を返します。

以下の例は、接続がどのように分割されるかを示すものです。

例1 oci_new_connect() の例

<?php
echo "<html><pre>";
$db "";

$c1 oci_connect("scott""tiger"$db);
$c2 oci_new_connect("scott""tiger"$db);

function 
create_table($conn)
{
  
$stmt oci_parse($conn"create table scott.hallo (test
varchar2(64))"
);
  
oci_execute($stmt);
  echo 
$conn " created table\n\n";
}

function 
drop_table($conn)
{
  
$stmt oci_parse($conn"drop table scott.hallo");
  
oci_execute($stmt);
  echo 
$conn " dropped table\n\n";
}

function 
insert_data($conn)
{
  
$stmt oci_parse($conn"insert into scott.hallo
            values('
$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");
  
oci_execute($stmtOCI_DEFAULT);
  echo 
$conn " inserted hallo\n\n";
}

function 
delete_data($conn)
{
  
$stmt oci_parse($conn"delete from scott.hallo");
  
oci_execute($stmtOCI_DEFAULT);
  echo 
$conn " deleted hallo\n\n";
}

function 
commit($conn)
{
  
oci_commit($conn);
  echo 
$conn " committed\n\n";
}

function 
rollback($conn)
{
  
oci_rollback($conn);
  echo 
$conn " rollback\n\n";
}

function 
select_data($conn)
{
  
$stmt oci_parse($conn"select * from scott.hallo");
  
oci_execute($stmtOCI_DEFAULT);
  echo 
$conn "----selecting\n\n";
  while (
oci_fetch($stmt)) {
    echo 
$conn " <" oci_result($stmt"TEST") . ">\n\n";
  }
  echo 
$conn "----done\n\n";
}

create_table($c1);
insert_data($c1);

select_data($c1);
select_data($c2);

rollback($c1);

select_data($c1);
select_data($c2);

insert_data($c2);
commit($c2);

select_data($c1);

delete_data($c1);
select_data($c1);
select_data($c2);
commit($c1);

select_data($c1);
select_data($c2);

drop_table($c1);
echo 
"</pre></html>";
?>

注意

注意:

PHP 5.0.0 より前のバージョンでは、かわりに ocinlogon() を使用します。 現在のバージョンでは、古い関数名もまだ使えます。 しかし、これは廃止予定であり非推奨です。

参考


OCI8 関数
PHP Manual