PHP マニュアル
前のページ |  | 次のページ

# LXXVII. Oracle 8 関数

# 導入

以下の関数により Oracle8 および Oracle7 データベースへのアクセスが 可能となります。この関数は、Oracle8 Call-Interface (OCI8) を使用し ます。

この拡張モジュールは、通常のOracle 拡張モジュールより柔軟性があります。 この拡張モジュールは、グローバルおよびローカルの PHP 変数の Ocacle プレースホルダーへのバインドをサポートします。また、LOB,FILE,ROWID を完全にサポートしており、ユーザー定義の変数が使用可能です。

# 要件

この拡張モジュールを使用するには、Oracle8クライアントライブラリを 必要とします。

この拡張モジュールを使用する前に Webデーモンのユーザでもある OracleユーザのOracle用環境変数が正しく設定されていることを確認し て下さい。設定されている必要がある変数を以下に示します。

- ORACLE_HOME

- ORACLE_SID

- LD_PRELOAD

- LD_LIBRARY_PATH

- NLS_LANG

- ORA_NLS33

Webサーバーのユーザ用に環境変数を設定した後、Webサーバーのユーザ (nobody, www)をグループoracleに追加して下さい。

> Webサーバが起動しないか、起動時にクラッシュする場合: Apacheがpthreadライブラリにリンクされているかどうか次のように確認 して下さい。

>     # ldd /www/apache/bin/httpd
>         libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000)
>         libm.so.6 => /lib/libm.so.6 (0x4002f000)
>         libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000)
>         libdl.so.2 => /lib/libdl.so.2 (0x4007a000)
>         libc.so.6 => /lib/libc.so.6 (0x4007e000)
>         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

> libpthread がこの一覧にない場合、Apacheを再インストールする必要 があります。

>     # cd /usr/src/apache_1.3.xx
>     # make clean
>     # LIBS=-lpthread ./config.status
>     # make
>     # make install

> UnixWareのようないくつかのシステムでは、libpthreadの代わりに libthreadが使用されています。PHPとApacheは、 EXTRA_LIBS=-lthreadをconfigureに指定する必要があります。

# インストール手順

オプション--with-oci8[=DIR]を指定 してPHPをコンパイルする必要があります。ただし、DIRのデフォルトは、 環境変数ORACLE_HOMEの値です。

# 実行用の設定

この拡張モジュールは設定ディレクティブを全く定義しません。

# リソース型

# 定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

`OCI_DEFAULT` (integer)

  Statement execution mode. Statement is not committed automatically when using this mode.

`OCI_DESCRIBE_ONLY` (integer)

  Statement execution mode. Use this mode if you don't want to really execute query, but only get select-list description.

`OCI_COMMIT_ON_SUCCESS` (integer)

  Statement execution mode. Statement is automatically commited after oci_execute() call.

`OCI_EXACT_FETCH` (integer)

  Statement fetch mode. Used when the application knows in advance exactly how many rows it will be fetching. This mode turns prefetching off for Oracle release 8 or later mode. Cursor is cancelled after the desired rows are fetched and may result in reduced server-side resource usage.

`OCI_SYSDATE` (integer)

`OCI_B_BFILE` (integer)

  Used with oci_bind_by_name() when binding BFILEs.

`OCI_B_CFILEE` (integer)

  Used with oci_bind_by_name() when binding CFILEs.

`OCI_B_CLOB` (integer)

  Used with oci_bind_by_name() when binding CLOBs.

`OCI_B_BLOB` (integer)

  Used with oci_bind_by_name() when binding BLOBs.

`OCI_B_ROWID` (integer)

  Used with oci_bind_by_name() when binding ROWIDs.

`OCI_B_CURSOR` (integer)

  Used with oci_bind_by_name() when binding cursors, previously allocated with oci_new_descriptor().

`OCI_B_NTY` (integer)

  Used with oci_bind_by_name() when binding named data types.

`OCI_B_BIN` (integer)

`SQLT_BFILEE` (integer)

  The same as `OCI_B_BFILE`.

`SQLT_CFILEE` (integer)

  The same as `OCI_B_CFILEE`.

`SQLT_CLOB` (integer)

  The same as `OCI_B_CLOB`.

`SQLT_BLOB` (integer)

  The same as `OCI_B_BLOB`.

`SQLT_RDD` (integer)

  The same as `OCI_B_ROWID`.

`SQLT_NTY` (integer)

  The same as `OCI_B_NTY`.

`OCI_FETCHSTATEMENT_BY_COLUMN` (integer)

  Default mode of oci_fetch_all().

`OCI_FETCHSTATEMENT_BY_ROW` (integer)

  Alternative mode of oci_fetch_all().

`OCI_ASSOC` (integer)

  Used with oci_fetch_all() and oci_fetch_array() to get an associative array as a result.

`OCI_NUM` (integer)

  Used with oci_fetch_all() and oci_fetch_array() to get an enumerated array as a result.

`OCI_BOTH` (integer)

  Used with oci_fetch_all() and oci_fetch_array() to get an array with both associative and number indices.

`OCI_RETURN_NULLS` (integer)

  Used with oci_fetch_array() to get empty array elements if field's value is `NULL`.

`OCI_RETURN_LOBS` (integer)

  Used with oci_fetch_array() to get value of LOB instead of the descriptor.

`OCI_DTYPE_FILE` (integer)

  This flag tells oci_new_descriptor() to initialize new FILE descriptor.

`OCI_DTYPE_LOB` (integer)

  This flag tells oci_new_descriptor() to initialize new LOB descriptor.

`OCI_DTYPE_ROWID` (integer)

  This flag tells oci_new_descriptor() to initialize new ROWID descriptor.

`OCI_D_FILE` (integer)

  The same as `OCI_DTYPE_FILE`.

`OCI_D_LOB` (integer)

  The same as `OCI_DTYPE_LOB`.

`OCI_D_ROWID` (integer)

  The same as `OCI_DTYPE_ROWID`.

# 例

例 1. OCIに関するヒント
`<?php // by sergo@bacup.ru // コマンドの実行を遅延させるには、オプション OCI_DEFAULT を使用して // 下さい OCIExecute($stmt, OCI_DEFAULT); // (クエリ結果取得後に)使用するデータを取得 $result = OCIResult($stmt, $n); if (is_object ($result)) $result = $result->load(); // INSERT または UPDATE 命令の場合に使用 $sql = "insert into table (field1, field2) values (field1 = 'value', field2 = empty_clob()) returning field2 into :field2"; OCIParse($conn, $sql); $clob = OCINewDescriptor($conn, OCI_D_LOB); OCIBindByName ($stmt, ":field2", &$clob, -1, OCI_B_CLOB); OCIExecute($stmt, OCI_DEFAULT); $clob->save ("some text"); OCICommit($conn); ?>`

コマンドラインで実行するのと同様な手法により、ストアドプロシージャ に簡単にアクセス可能です。

例 2. ストアドプロシージャの使用法
`<?php // by webmaster@remoterealty.com $sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname', '$lastname', '$company', '$address1', '$address2', '$city', '$state', '$postalcode', '$country', :error_code );end;" ); // この命令は、:address_id を入出力変数、:error_code を出力変数として // ストアドプロシージャ sp_newaddress をコールします。 // 続いて、以下のようにバインドを実行します。 OCIBindByName ( $sth, ":address_id", $addr_id, 10 ); OCIBindByName ( $sth, ":error_code", $errorcode, 10 ); OCIExecute ( $sth ); ?>`

前のページ | ホーム | 次のページ
deaggregate | 上に戻る | oci_bind_by_name