関数・クラス解説

oci_connect

version:PHP 5, PHP 7, PECL OCI8 >= 1.1.0 (公式)

Oracle データベースに接続する

公式リファレンス

書式

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

説明

他のほとんどの OCI8 コールで必要な接続 ID を返します。

接続の管理及び接続プーリングについての一般的な情報は 接続のハンドリングをご覧下さい。

PHP 5.1.2 (PECL OCI8 1.1) 以降で、接続を閉じるために oci_close()を使用できます。

同一の引数で oci_connect() を呼び出すと、 2回目以降は最初の呼び出しで返された接続ハンドルを返します。 これは、あるハンドル内のトランザクションが、他のハンドル内にも あることを意味します、なぜなら、それらは同一の 基礎となるデータベース接続を使用するからです。 もし2つのハンドルを互いにトランザクション的に分離する必要があれば、 替わりに oci_new_connect() を使用してください。

パラメータ

username
Oracle ユーザー名
password
username に対するパスワード
connection_string
接続先の Oracle インスタンス。» Easy Connect文字列、tnsnames.oraファイルの接続文字列、あるいはローカルの Oracle インスタンス名を指定します。省略した場合、PHP は環境変数TWO_TASK (Linux) あるいはLOCAL (Windows)と ORACLE_SID を用いて接続先のOracle インスタンス を判断します。Easy Connect 方式を使うには、PHP を Oracle10g 以降のクライアントライブラリとリンクさせる必要があります。Oracle 10g の Easy Connect文字列の形式は[//]host_name[:port][/service_name] です。Oracle11g 以降の場合は、この構文は[//]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_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 を返します。

注意

注意: OCI8 拡張モジュールのインストールや設定に不備があると、 接続時に問題やエラーが発生します。解決策は インストール/設定 を参照ください。

サンプル

例1 Easy Connect 構文を使った基本的な oci_connect() の使用例

// "localhost" マシン上の XE サービス(例えばデータベース)に接続します。 $conn = oci_connect('hr', 'welcome', 'localhost/XE'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM employees'); oci_execute($stid); echo "\n"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {     echo "\n";     foreach ($row as $item) {         echo "    " . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "\n";     }     echo "\n"; } echo "\n";

例2 Network Connect 名を使った基本的な oci_connect() の使用例

// tnsnames.ora ファイルに記載された MYDB データベースに接続します。 // MYDB 用の tnsnames.ora エントリーの一例です。 //   MYDB = //     (DESCRIPTION = //       (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.oracle.com)(PORT = 1521)) //       (CONNECT_DATA = //         (SERVER = DEDICATED) //         (SERVICE_NAME = XE) //       ) //     ) $conn = oci_connect('hr', 'welcome', 'MYDB'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM employees'); oci_execute($stid); echo "\n"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {     echo "\n";     foreach ($row as $item) {         echo "    " . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "\n";     }     echo "\n"; } echo "\n";

例3 oci_connect() での明示的な文字セットの指定

$conn = oci_connect('hr', 'welcome', 'localhost/XE', 'AL32UTF8'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT * FROM employees'); oci_execute($stid); echo "\n"; while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {     echo "\n";     foreach ($row as $item) {         echo "    " . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "\n";     }     echo "\n"; } echo "\n";

例4 oci_connect() での複数コールの使用

$c1 = oci_connect("hr", "welcome", 'localhost/XE'); $c2 = oci_connect("hr", "welcome", 'localhost/XE'); // 同一の基礎となるデータベース接続を使用することを意味する、 // 同一の PHP リソース id を $c1 及び $c2 の両方が示します。 echo "c1 is $c1 \n"; echo "c2 is $c2 \n"; function create_table($conn) {     $stmt = oci_parse($conn, "create table hallo (test varchar2(64))");     oci_execute($stmt);     echo "Created table \n"; } function drop_table($conn) {     $stmt = oci_parse($conn, "drop table hallo");     oci_execute($stmt);     echo "Dropped table \n"; } function insert_data($connname, $conn) {     $stmt = oci_parse($conn, "insert into hallo               values(to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");     oci_execute($stmt, OCI_DEFAULT);     echo "$connname inserted row without committing \n"; } function rollback($connname, $conn) {     oci_rollback($conn);     echo "$connname rollback \n"; } function select_data($connname, $conn) {     $stmt = oci_parse($conn, "select * from hallo");     oci_execute($stmt, OCI_DEFAULT);     echo "$connname ----selecting \n";     while (oci_fetch($stmt)) {         echo "    " . oci_result($stmt, "TEST") . " \n";     }     echo "$connname ----done \n"; } create_table($c1); insert_data('c1', $c1);   // c1 を使用して行を挿入 sleep(2);                 // 2行目で異なるタイムスタンプを表示するためにスリープします insert_data('c2', $c2);   // c2 を使用して行を挿入 select_data('c1', $c1);   // 両方の挿入結果が返されます select_data('c2', $c2);   // 両方の挿入結果が返されます rollback('c1', $c1);      // c1 を使用してロールパック select_data('c1', $c1);   // 両方の挿入行為がロールバックされました select_data('c2', $c2); drop_table($c1); // 接続のうちの一つを閉じると、その PHP 変数が利用できなくなりますが、 // もう一つは使用できます。 oci_close($c1); echo "c1 is $c1 \n"; echo "c2 is $c2 \n"; // 出力です。 //    c1 is Resource id #5 //    c2 is Resource id #5 //    Created table //    c1 inserted row without committing //    c2 inserted row without committing //    c1 ----selecting //        09-DEC-09 12:14:43 //        09-DEC-09 12:14:45 //    c1 ----done //    c2 ----selecting //        09-DEC-09 12:14:43 //        09-DEC-09 12:14:45 //    c2 ----done //    c1 rollback //    c1 ----selecting //    c1 ----done //    c2 ----selecting //    c2 ----done //    Dropped table //    c1 is  //    c2 is Resource id #5

参考

  • oci_pconnect() - 持続的接続を使用してOracle データベースに接続する
  • oci_new_connect() - 一意な接続を使って Oracle サーバーへ接続する
  • oci_close() - Oracleとの接続を閉じる
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール