天天看點

PHP: 如何連接配接oracle資料庫進行資料讀取

今天在給客戶修改一套報表程式時遇到的問題,PHP和Oracle正好都不是我最熟悉的,但看了一些資料,勉強能改改。他們這套報表程式并不是很複雜,之前也是自己搗鼓搗鼓用PHP寫的。其實用不用PHP并不是關鍵,我的主要使命是要對報表系統的架構上做一些優化。經過我們的努力,原先很多分散的頁面都進行了整合,資料庫結構也進行了一些優化。

例如不管報表的資料源是oracle,還是sql server,我們都可以使用同一個頁面來完成查詢和展現。以後增加報表的時候,隻需要在資料庫中進行配置即可,無需修改或者增加頁面。

另外,不管報表是要在浏覽器中檢視還是要導出Excel格式,我們都可以用同一個頁面來實作,無需用多個頁面。

關于在PHP中連接配接Oracle的範例,摘錄一個如下

oci_fetch_all

(PHP 5, PECL oci8:1.1-1.2.4)

oci_fetch_all — 擷取結果資料的所有行到一個數組

說明

int oci_fetch_all ( resource $statement, array &$output [, int $skip [, int $maxrows [, int $flags]]] )

oci_fetch_all() 從一個結果中擷取所有的行到一個使用者定義的數組。oci_fetch_all() 傳回擷取的行數,出錯則傳回 FALSE。skip 是從結果中擷取資料時,最開始忽略的行數(預設值是 0,即從第一行開始)。maxrows 是要讀取的行數,從第 skip 行開始(預設值是 -1,即所有行)。

注意: 本函數對 PHP NULL 值設定 NULL 字段。

flags 參數可以是下列值的任意組合:

OCI_FETCHSTATEMENT_BY_ROW

OCI_FETCHSTATEMENT_BY_COLUMN(預設值)

OCI_NUM

OCI_ASSOC

例 1583. oci_fetch_all() 例子

<?php /* oci_fetch_all example mbritton at verinet dot com (990624) */ $conn = oci_connect("scott", "tiger"); $stmt = oci_parse($conn, "select * from emp"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); if ($nrows > 0) {    echo "<table border=\"1\">\n";    echo "<tr>\n";    foreach ($results as $key => $val) {       echo "<th>$key</th>\n";    }    echo "</tr>\n";    for ($i = 0; $i < $nrows; $i++) {       echo "<tr>\n";       foreach ($results as $data) {          echo "<td>$data[$i]</td>\n";       }       echo "</tr>\n";    }    echo "</table>\n"; } else {    echo "No data found<br />\n"; } echo "$nrows Records Selected<br />\n"; oci_free_statement($stmt); oci_close($conn); ?>