OCIDefineByName: 让 SELECT 指令可使用 PHP 变量。 
OCIBindByName: 让动态 SQL 可使用 PHP 变量。 
OCILogon: 打开与 Oracle 的链接。 
OCILogOff: 关闭与 Oracle 的链接。 
OCIExecute: 执行 Oracle 的指令部分。 
OCICommit: 将 Oracle 的交易处理付诸实行。 
OCIRollback: 撤消当前交易。 
OCINumRows: 取得受影响字段的数目。 
OCIResult: 从目前列 (row) 的资料取得一栏 (column)。 
OCIFetch: 取得返回资料的一列 (row)。 
OCIFetchInto: 取回 Oracle 资料放入数组。 
OCIColumnIsNULL: 测试返回行是否为空的。 
OCIColumnSize: 取得字段类型的大小。 
OCINewDescriptor: 初始新的 LOB/FILE 描述。 
OCIParse: 分析 SQL 语法。 
OCIDefineByName: 让 SELECT 指令可使用 PHP 变量。 
OCIBindByName: 让动态 SQL 可使用 PHP 变量。 
OCILogon: 打开与 Oracle 的链接。 
OCILogOff: 关闭与 Oracle 的链接。 
OCIExecute: 执行 Oracle 的指令部分。 
OCICommit: 将 Oracle 的交易处理付诸实行。 
OCIRollback: 撤消当前交易。 
OCINumRows: 取得受影响字段的数目。 
OCIResult: 从目前列 (row) 的资料取得一栏 (column)。 
OCIFetch: 取得返回资料的一列 (row)。 
OCIFetchInto: 取回 Oracle 资料放入数组。 
OCIColumnIsNULL: 测试返回行是否为空的。 
OCIColumnSize: 取得字段类型的大小。 
OCINewDescriptor: 初始新的 LOB/FILE 描述。 
OCIParse: 分析 SQL 语法。 

解决方案 »

  1. phplib-7.4-pre2.tar.gz ,里面有详细的db_oracle.inc文件,可以在http://sourceforge.net/找到
      

  2. 给你一份
    <?php
          
    /*
     * Oracle/OCI8 accessor based on Session Management for PHP3
     *
     * (C) Copyright 1999 Stefan Sels phplib@sels.com
     *
     * based on db_oracle.inc by Luis Francisco Gonzalez Hernandez 
     * contains metadata() from db_oracle.inc 1.10
     *
     * $Id: oracle.inc,v 1.1.1.1 2003/02/11 07:40:31 yue Exp $
     *
     */ class DB_Sql {
      var $Debug    =  0;
      var $sqoe     =  1; // sqoe= show query on error  var $Database = "";
      var $User     = "";
      var $Password = "";  var $Link_ID    = 0;
      var $Record    = array();
      var $Row;
      var $Parse;
      var $Error     = "";  function connect() {
      /*
          if ( 0 == $this->Link_ID ) {
              if($this->Debug) {
                  printf("<br>Connecting to $this->Database...<br>\n");
              }
              $this->Link_ID=OCIplogon
                    ("$this->User","$this->Password","$this->Database");          if (!$this->Link_ID) {
                  $this->halt("Link-ID == false " .
                              "($this->Link_ID), OCILogon failed");
              } 
              
              if($this->Debug) {
                  printf("<br>Obtained the Link_ID: $this->Link_ID<br>\n");
              }   
          }
       */
              $this->Link_ID=OCIlogon("$this->User","$this->Password","$this->Database");
      }
      
      function query($Query_String) {
      
          $this->connect();       $this->Parse=OCIParse($this->Link_ID,$Query_String);
          if(!$this->Parse) {
               $this->Error=OCIError($this->Parse);
      
          } else {
      OCIExecute($this->Parse);
              $this->Error=OCIError($this->Parse); 
      return 1;
          }
          $this->Row=0;
          if($this->Debug) {
              printf("Debug: query = %s<br>\n", $Query_String);
          }    
          if ($this->Error["code"]!=1403 && $this->Error["code"]!=0 && $this->sqoe) 
          echo "<BR><FONT color=red><B>".$this->Error["message"]."<BR>Query :\"$Query_String\"</B></FONT>";
          //return $this->Parse;
      
      }
      
      function next_record() {
          if(0 == OCIFetchInto($this->Parse,$result,OCI_ASSOC+OCI_RETURN_NULLS)) {
              if ($this->Debug) {
                printf("<br>ID: %d,Rows: %d<br>\n",
                  $this->Link_ID,$this->num_rows());
              }
              $this->Row        +=1;
              
              $errno=OCIError($this->Parse);
              if(1403 == $errno) { # 1043 means no more records found
                  $this->Error="";
                  $this->disconnect();
                  $stat=0;
              } else {
                  $this->Error=OCIError($this->Parse);
                  if($this->Debug) {
                      printf("<br>Error: %s",
                      $this->Error["message"]);
                  }
                  $stat=0;
              }
          } else { 
              for($ix=1;$ix<=OCINumcols($this->Parse);$ix++) {
                  $col=strtoupper(OCIColumnname($this->Parse,$ix));
                  $colreturn=strtolower($col);
                  $this->Record[ "$colreturn" ] = $result["$col"]; 
                  if($this->Debug) echo"<b>[$col]</b>:".$result["$col"]."<br>\n";
              }
              $stat=1;
          }  return $stat;
      }  function seek($pos) {
          $this->Row=$pos;
      }  function metadata($table,$full=false) {
          $count = 0;
          $id    = 0;
          $res   = array();
          
      

  3. /*
         * Due to compatibility problems with Table we changed the behavior
         * of metadata();
         * depending on $full, metadata returns the following values:
         *
         * - full is false (default):
         * $result[]:
         *   [0]["table"]  table name
         *   [0]["name"]   field name
         *   [0]["type"]   field type
         *   [0]["len"]    field length
         *   [0]["flags"]  field flags ("NOT NULL", "INDEX")
         *   [0]["format"] precision and scale of number (eg. "10,2") or empty
         *   [0]["index"]  name of index (if has one)
         *   [0]["chars"]  number of chars (if any char-type)
         *
         * - full is true
         * $result[]:
         *   ["num_fields"] number of metadata records
         *   [0]["table"]  table name
         *   [0]["name"]   field name
         *   [0]["type"]   field type
         *   [0]["len"]    field length
         *   [0]["flags"]  field flags ("NOT NULL", "INDEX")
         *   [0]["format"] precision and scale of number (eg. "10,2") or empty
         *   [0]["index"]  name of index (if has one)
         *   [0]["chars"]  number of chars (if any char-type)
         *   ["meta"][field name]  index of field named "field name"
         *   The last one is used, if you have a field name, but no index.
         *   Test:  if (isset($result['meta']['myfield'])) {} ...
         */      $this->connect();      ## This is a RIGHT OUTER JOIN: "(+)", if you want to see, what
          ## this query results try the following:
          ## $table = new Table; $db = new my_DB_Sql; # you have to make
          ##                                          # your own class
          ## $table->show_results($db->query(see query vvvvvv))
          ##
          $this->query("SELECT T.table_name,T.column_name,T.data_type,".
               "T.data_length,T.data_precision,T.data_scale,T.nullable,".
               "T.char_col_decl_length,I.index_name".
               " FROM ALL_TAB_COLUMNS T,ALL_IND_COLUMNS I".
               " WHERE T.column_name=I.column_name (+)".
               " AND T.table_name=I.table_name (+)".
               " AND T.table_name=UPPER('$table') ORDER BY T.column_id");
          
          $i=0;
          while ($this->next_record()) {
            $res[$i]["table"] =  $this->Record[table_name];
            $res[$i]["name"]  =  strtolower($this->Record[column_name]);
            $res[$i]["type"]  =  $this->Record[data_type];
            $res[$i]["len"]   =  $this->Record[data_length];
            if ($this->Record[index_name]) $res[$i]["flags"] = "INDEX ";
            $res[$i]["flags"] .= ( $this->Record[nullable] == 'N') ? '' : 'NOT NULL';
            $res[$i]["format"]=  (int)$this->Record[data_precision].",".
                                 (int)$this->Record[data_scale];
            if ("0,0"==$res[$i]["format"]) $res[$i]["format"]='';
            $res[$i]["index"] =  $this->Record[index_name];
            $res[$i]["chars"] =  $this->Record[char_col_decl_length];
            if ($full) {
                    $j=$res[$i]["name"];
                    $res["meta"][$j] = $i;
                    $res["meta"][strtoupper($j)] = $i;
            }
            if ($full) $res["meta"][$res[$i]["name"]] = $i;
            $i++;
          }
          if ($full) $res["num_fields"]=$i;
    #      $this->disconnect();
          return $res;
      }
      function affected_rows() {
        return $this->num_rows();
      }  function num_rows() {
        return OCIrowcount($this->Parse);
      }  function num_fields() {
          return OCINumcols($this->Parse);
      }  function nf() {
        return $this->num_rows();
      }  function np() {
        print $this->num_rows();
      }  function f($Name) {
        return $this->Record[$Name];
      }  function p($Name) {
        print $this->Record[$Name];
      }  function disconnect() {
          if($this->Debug) {
              printf("Disconnecting...<br>\n");
          }
          OCILogoff($this->Link_ID);
      }
      
      function halt($msg) {
        printf("</td></tr></table><b>Database error:</b> %s<br>\n", $msg);
        printf("<b>ORACLE Error</b>: %s<br>\n",
          $this->Error["message"]);
        die("Session halted.");
      }我想应该可以