関数・クラス解説

oci_close

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

Oracleとの接続を閉じる

公式リファレンス

書式

oci_close ( resource $connection ) : bool

説明

接続 connection を閉じます。 他のいかなるリソースも利用しない、なおかつ oci_connect() または oci_new_connect() で作成された場合、 基礎となるデータベース接続が閉じられます。

もはや不要となった接続を閉じることを推奨します。 なぜなら、これにより他のユーザーがデータベースリソースを利用できるようになるからです。

パラメータ

connection
oci_connect()、oci_pconnect() あるいは oci_new_connect() が返す Oracle 接続 ID。

返値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

注意

注意: 接続識別子に依存する変数、たとえば oci_parse() により返される ステートメント識別子のような変数は、基礎となるデータベース接続が閉じられる前に 解放されなければいけません。
注意: PHP 5.1.2 (PECL OCI8 1.1) より前のバージョンでは、oci_close() は実際には何もしませんでした。最近のバージョンでは、きちんと Oracle 接続を閉じます。 この関数の古い動作をさせる場合は oci8.old_oci_close_semantics オプションを使用してください。
注意: oci_close() 関数は oci_pconnect() で作成された基礎となるデータベース接続を 閉じません。

サンプル

例1 接続を閉じる

基礎となるデータベース接続がきちんと終了され、データベースリソースが解放されることを確実にするために、 接続に関連したリソースは閉じられるべきです。

$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 departments'); $r = oci_execute($stid); oci_fetch_all($stid, $res); var_dump($res); // 接続を閉じるときにステートメント識別子を解放します oci_free_statement($stid); oci_close($conn);

例2 参照の全てが閉じられるまでデータベース接続は閉じられません

基礎となるデータベースへの接続が閉じられる前に 接続の内部的な参照回数識別子はゼロで無ければいけません

$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 departments');  // これは $conn の参照回数を増やします oci_execute($stid); oci_fetch_all($stid, $res); var_dump($res); oci_close($conn); // $conn はもはやスクリプトで使用できませんが、基礎となるデータベース接続は // $stid が解放されるまで開かれたまま保たれます。 var_dump($conn);  // NULL を出力  // PHP が活動していない間にターミナルウィンドウで Oracle の V$SESSION ビューを // 参照すると、データベースユーザーがまだ接続されていると表示します。 sleep(10); // $stid が解放されると、データベース接続は物理的に閉じられます。 oci_free_statement($stid);   // PHP が活動していない間にターミナルウィンドウで Oracle の V$SESSION ビューを // 参照すると、データベースユーザーが切断されたと表示します。 sleep(10);

例3 一回以上開かれた接続を閉じる

データベースクレデンシャルが再利用されるときは、基礎となるデータベース接続が閉じられる前に、 両方の接続がともに閉じられていなければいけません。

$conn1 = oci_connect('hr', 'welcome', 'localhost/XE'); // 同じ基礎となるデータベース接続を再利用するクレデンシャルを使用すると、 // $conn1 上でなされたコミットされていない変更は全て、 $conn2 で認識できます。 $conn2 = oci_connect('hr', 'welcome', 'localhost/XE'); // PHP が活動していない間にターミナルウィンドウで Oracle の V$SESSION ビューを // 参照すると、データベースユーザーが一つだけ接続されたと表示します。 sleep(10); oci_close($conn1); // 基礎となるデータベース接続を閉じません。 var_dump($conn1);  // 変数 $conn1 がもはや利用できないので NULL を出力します var_dump($conn2);  // $conn2 はまだ有効な接続リソースと表示されます。

例4 変数がスコープから外れると接続が閉じられます

接続を参照する変数の全てがスコープを外れてPHPにより解放されると、 (必要に応じて)ロールバックが発生します。 そしてデータベースへの基礎となる接続が閉じられます。

function myfunc() {     $conn = oci_connect('hr', 'hrpwd', 'localhost/XE');     if (!$conn) {         $e = oci_error();         trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);     }     $stid = oci_parse($conn, 'UPDATE mytab SET id = 100');     oci_execute($stid, OCI_NO_AUTO_COMMIT);     return "Finished"; } $r = myfunc(); // この時点でロールバックが発生し、基礎となるデータベース接続が閉じられます。 print $r;  // 関数の返り値 "Finished" を表示します

参考

  • oci_connect() - Oracle データベースに接続する
  • oci_free_statement() - 文やカーソルに関連付けられた全てのリソースを解放する
  • ワード検索


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

    関数名アルファベット別

    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用の拡張モジュール