オラクル
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);
?>