ホームページ >php教程 >php手册 >PHP+Oracle (OCI) 暫定版

PHP+Oracle (OCI) 暫定版

WBOY
WBOYオリジナル
2016-06-21 09:09:071416ブラウズ

オラクル

Oracle (OCI) から始める

データベースとして Oracle を選択する PHP ユーザーが増えるにつれ、PHP リリース環境で Oracle インターフェイスにアクセスする方法がますます重要になってきます。まず、シンプルで基本的かつより明示的な Oracle シナリオを簡単に見ていきます。 Oralce と Oralce8 は、PHP の OCI8 関数ライブラリを使用します。 PHP マニュアル (http://www.php.net/manual/ref.oci8.php) に簡単な説明があります。

これらの関数を使用すると、Oracle および Oracle7d データベースにアクセスできます。Oracle8 Call-Interface(OCI8) を使用します。 )。これらの拡張機能を使用するには、Oracle8 のクライアント ライブラリが必要です。

これらの拡張関数は、標準の Oracle 拡張関数よりも柔軟で、PHP のグローバル変数とローカル変数、および Oracle でのコンパイルをサポートしており、ユーザー補助変数を定義できます。

ここからは、Oracle のバージョンを指すために「Oracle」を使用します。この記事は、PHP と Oracle がインストールされ実行されていることを前提としています。 Oracle のヘルプは、http://www.oracle.com または http://technet.oracle.com で参照できます。

この記事のポイントは
1. ORALCLE に接続する
2. SQL ステートメントを構築して実行する
3. 追加機能として結果を「マークされたページ」に制限/オフセットする

非常に大規模なデータ セットから派生した制限/オフセットを表示するクエリを実行する方法を確認できます。

/*基本的な使い方から解決方法を紹介します。この例で使用されるファイルは、Rod Kreisler によって書かれた記事 (http://www.phpbuilder.com/columns/rod20000221.php3) の新しいバージョンです。ファイルの新しいバージョンは http://php.socket7.net にあります。 $offset が 0 または空に設定されている場合は、0 に設定します。
*/
if (empty($offset) || $offset < 0) {
$offset=0;
}

/*基本的な使い方から解決方法を紹介します。この例で使用されるファイルは、Rod Kreisler によって書かれた記事 (http://www.phpbuilder.com/columns/rod20000221.php3) の新しいバージョンです。ファイルの新しいバージョンは http://php.socket7.net にあります。 $offset が 0 または空に設定されている場合は、0 に設定します。
*/
if (empty($offset) || $offset < 0) {
$offset=0;
}

$limit = 3
/*
ORACLE_SID を直接使用します。データベースに接続するとき。 CGI として PHP を使用すると、不連続接続が使用されます。この例では、この不連続接続を使用してみましょう。 Windows ではこれはレジストリで設定できますが、UNIX では putenv() 関数 putenv("ORALCE_SID=ORASID"); を使用できます
または、データベースに接続するときに ORACLE_SID を直接参照することもできます。この例では、ORACLE_SID を直接参照してみましょう。
APACHE のモジュールとして PHP を使用すると、永続的な接続を使用できます。 PHP を CGI として使用する場合は非永続接続を使用しますが、この例では非永続接続を使用します。
*/

$conn = OCILogon("user_name", "password", "ORASID");

/*
エラー メッセージ。データベースが接続されていない場合は、エラー メッセージが表示され、スクリプトの実行は終了します。
*/

if (!$conn) {
echo "

ERROR - Could not connect to Oracle

";
exit;

/* 接続が成功した場合、$connジョイナーです。そうしないと、スクリプトが終了し、「Oracle に接続できませんでした」というエラー メッセージが出力されます。
ここで SQL ステートメントの分析と作成を開始し、無制限のクエリ結果からカウント可能なレコードを取得します。
ここでのフォーマットステートメント「Select count(*) from table_name」は、データベース内で実行される SQL 関数である count() と同等です。 PHP に依存して計算された結果を返すよりも優れています。
*/

$sql = "table_name から count(*) を選択";

$stmt = OCIParse($conn, $sql);
if(!$stmt) {
echo "

エラー - 可能性がありますSQL ステートメントを解析しません。

";
exit;
}

/*
間違った SQL ステートメントを入力するか、別のエラーが発生すると、「SQL を解析できません」というエラー メッセージが表示されます。$stmt は今は定義ステートメントです。
ここで parse ステートメントを実行します
*/

OCIExecute($stmt);

/*
これでステートメントが実行されましたが、ご覧のとおり、OCIParse で指定されているとおり、結果識別子は OCIExecute() から返されません。 () によって返される結果には、Oracle が必要とするすべての情報が含まれています。
ここで、このクエリの結果の選択を開始します。$total rows[0] には数値が含まれます。行が返されない場合は、エラーが表示され、スクリプトは終了します。
*/

OCIFetchInto($stmt, &$total_rows);

if ( !$total_rows[0] ) {
echo "

エラー - 行が返されません!

";
}

/*
このコードはオプションですが、返される結果がわかりやすくなり、「合計 15 件のレコードがあり、結果 4 から 15 が表示されます。」のようなコメントが表示されます。 $end = ($begin+($limit-1));
if ($end > $total_rows[0]) {
$end = $total_rows[0];

echo " $total_rows[0] の結果。
n";
echo "$begin から $end までの結果を表示しています。 ;
n";

/*
さあ、本題に取り掛かります。元のステートメント識別子を解放してから SQL ステートメントを作成します。SQL ステートメントを分析して実行します。
コードを記述するとき 注: MYSQL とは異なり、 Oracle では、SQL ステートメント内の制限ステートメントはサポートされていません。特定の行を選択するにはさまざまな方法がありますが、最良の方法は、選択結果を一時テーブルに入れるか、すべての結果を「バッファリング」することです。このようなメソッドは、このチュートリアルの範囲外です。以下でさらに説明する、より単純なアプローチを使用します。
*/
OCIFreeStatement($stmt);

$sql = "テーブル名から * を選択";

$stmt = OCIParse($conn, $sql) {
echo "< h1>エラー - SQL ステートメントを解析できませんでした。";
exit;
}

OCIExecute($stmt);

/*
結果を表示します。最も簡単な方法は、結果コレクションでこのループを使用することです。最終結果の表示には HTML が使用されますが、この例は非常に単純なので、HTML は使用しません。
コードを記述するときの注意: 上で指定したように、Oracle には制限がないため、すべての結果セットから必要な結果を取り出し、すでに持っている結果を終了することによってこのループを実行する必要があります。
このセクションでは、いくつかの異なるアプローチを紹介しますが、実際には、このコードを記述するより良い方法があるはずです。しかし、私のアプローチは少し読みにくいとは思いますが、うまくいきます。
*/

$i=0;
$j=0;
while( OCIFetchInto($stmt, &$result_array) ) {
if ($i>=$offset) {
if ($j <$limit) ) {
for ($k=0; $k<=count($result_array); $k++) {
echo $result_array[$k]." ";
echo "
";
}
$i++;
}
echo "
";

/*
結果が現在のページに表示されます。ここで、訪問者が NEXT/PREV をクリックして他のページに移動できるようにします
* /

// 結果に必要なページ数を計算します。
$pages = intval($total_rows[0]/$limit);

// $pages は、残りの部分を除いた必要な合計ページ数になります
if ($total_rows [0]%$limit) {
// 余りがあるのでページを 1 つ追加します
$pages++;
}

// 最初のページが表示されるとき、PREV 接続は表示されません
if ($offset!= 0) {
$prevoffset=$offset-$limit;
echo "< n";次に、ページをループして番号付きリンクを作成します
// 例 1 2 3 4 5 NEXT >> for ($i=1;$i<=$pages;$i++) {
// 現在のリンクを確認しますpage
if (($offset/$limit) == ($i-1)) {
// $i は現在のページと等しいので、リンクを表示しないでください
echo "$i "; else {
/ / $i は現在のページではないため、ページ $i へのリンクを表示します
$newoffset=$limit*($i-1);
echo "
$i< /a> n";
}
}

//現在のページが最後のページかどうかを確認します
if (!((($offset/$limit)+1)==$pages) && $pages !=1) {
// まだ最後のページにないので、次のリンクを表示します
$newoffset=$offset+$limit;
echo "
NEXT > ;>< ;/a>

n";
}

/*
これで Oracle の使用は完了したため、最後のステートメントのフラグを解放して終了します。
*/

OCIFreeStatement($stmt);

?>