|
|
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ライブラリにリンクされているかどうか次のように確認
して下さい。
libpthread がこの一覧にない場合、Apacheを再インストールする必要
があります。
UnixWareのようないくつかのシステムでは、libpthreadの代わりに
libthreadが使用されています。PHPとApacheは、
EXTRA_LIBS=-lthreadをconfigureに指定する必要があります。
オプション--with-oci8[=DIR]を指定
してPHPをコンパイルする必要があります。ただし、DIRのデフォルトは、
環境変数ORACLE_HOMEの値です。
この拡張モジュールは設定ディレクティブを全く定義しません。
これらの定数は、この拡張モジュールで定義されており、
この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー
ドされるかのどちらかの場合のみ使用可能です。
例 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 );
?>
|
|
|