LXXIOracle 8 関数
以下の関数により Oracle8 および Oracle7 データベースへのアクセスが
可能となります。この関数は、Oracle8 Call-Interface (OCI8) を使用し
ます。この拡張機能を使用するには、Oracle8 クライアントライブラリが
必要です。
この拡張モジュールは、通常のOracle拡張機能より柔軟性があります。
この拡張モジュールは、グローバルおよびローカルの PHP 変数の Ocacle
プレースホルダーへのバインドをサポートします。また、LOB,FILE,ROWID
を完全にサポートしており、ユーザー定義の変数が使用可能です。
この拡張モジュールを使用する前に 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を再インストールする必要が
あります。
例 1OCIに関するヒント <?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 );
?> |
|