红联Linux门户
Linux帮助

PHP Oracle 数据库函数库

发布时间:2006-03-17 11:08:25来源:红联作者:Linux培训部长
要使用这个函数库,要在安装 PHP 及 Apache Server 之前先将 Oracle 数据库安装好,并确定 Oracle 能够顺利运作。之后在 PHP 配置 (configure) 时加入 --with-oracle=DIR 的选项,DIR 就是 $ORACLE_HOME 环境变量,例如:

./configure --with-oracle=/abc/def/oracle/product/7.0.3 --with-apache=../apache_1.3.x --enable-track-vars

以下的范例是 stevel@nettek-llc.com (22-Jan-1999) 所提供的。这个范例是返回 Oracle 中 sid1 数据库 (Database) 的 EMP 资料表 (Table) 所有资料。帐号是 SCOTT、密码为TIGER。

引用:
    putenv ( "ORACLE_SID=sid1" );
    putenv ( "ORACLE_HOME=/u01/app/oracle/product/8.0.5" );
    $handle = ora_plogon ( "SCOTT@sid1" , "TIGER" ) or die;
    $cursor = ora_open ( $handle );
    ora_commitoff ( $handle );
    $query = "SELECT * FROM EMP"
    ora_parse ( $cursor , $query ) or die;
    ora_exec ( $cursor );
    echo "
n"  

    echo "$query nn "
    $numcols = 0
    while( ora_fetch ( $cursor )) {
      $numcols = ora_numcols ( $cursor );
      for ( $column = 0 $column < $numcols $column ++) {
        $data = trim ( ora_getcolumn ( $cursor , $column ));
        if( $data == "" ) $data = "NULL"
          echo "$data t "
      }
      echo "n"
    }
    $numrows = ora_numrows ( $cursor );
    echo " n ROWS RETURNED: $numrows n "
    echo "
n"
    ora_close ( $cursor );
  ?>


  kk@shonline.de (05-Aug-1998) 指出 ORACLE_HOME 为 Oracle 的安装路径,ORACLE_SID 为 Oracle 的数据库名称,若不知道这二个环境变量可以用 sqlplus 连上 Oracle 来查证。

  Ora_Bind: 链接 PHP 变量到 Oracle 参数。
  Ora_Close: 关闭一个 Oracle 的 cursor。
  Ora_ColumnName: 得到 Oracle 返回列 (Column) 的名称。
  Ora_ColumnType: 得到 Oracle 返回列 (Column) 的类型。
  Ora_Commit: 将 Oracle 的交易处理付诸实行。
  Ora_CommitOff: 关闭自动执行 Oracle 交易改动的功能。
  Ora_CommitOn: 打开自动执行 Oracle 交易改动的功能。
  Ora_Error: 获得 Oracle 错误信息。
  Ora_ErrorCode: 获得 Oracle 错误代码。
  Ora_Exec: 执行 Oracle 的指令部分。
  Ora_Fetch: 取得返回资料的一列 (row)。
  Ora_GetColumn: 从返回列 (row) 的资料取得一栏 (column)。
  Ora_Logoff: 结束与 Oracle 的链接。
  Ora_Logon: 打开与 Oracle 的链接。
  Ora_Open: 打开 Oracle 的 cursor。
  Ora_Parse: 分析 SQL 语法。
  Ora_Rollback: 撤消当前交易。
  Ora_Do: 快速的 SQL 查询。
  Ora_FetchInto: 取回 Oracle 资料放入数组。
  Ora_ColumnSize: 取得字段类型的大小。
  Ora_Numcols: 取得字段的数目。
  Ora_PLogon: 打开与 Oracle 的长期链接。

  Ora_Bind 链接 PHP 变量到 Oracle 参数。
  语法: int ora_bind(int cursor, string PHP variable name, string SQL parameter name, int length, int [type]);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数将 PHP 变量与 SQL 参数系结在一起。SQL 参数 (SQL parameter) 必须是类似 ":name" 的型式。语法中的 type 为可省略的参数选项,可以设成下面三种数字之一:0 为默认值,表输入/输出 (in/out);1 表输入 (in);2 表输出 (out)。在 PHP 3.0.1版之后,亦可以使用下列常量代替 type 的三种数字值:ORA_BIND_INOUT、ORA_BIND_IN 或 ORA_BIND_OUT。重要的是本函数应是在 ora_parse() 之后与 ora_exec() 之前呼叫使用。若成功则返回 true,反之返回 false。要处理详细的错误信息可使用 ora_error() 及 ora_errorcode()。

  使用范例
      ora_parse($curs, "declare tmp INTEGER; begin tmp := :in; :out := tmp; :x := 7.77; end;");
    ora_bind($curs, "result", ":x", $len, 2);
    ora_bind($curs, "input", ":in", 5, 1);
    ora_bind($curs, "output", ":out", 5, 2);
    $input = 765;
    ora_exec($curs);
    echo "Result: $result
Out: $output
In: $input";
  ?>

  Ora_Close 关闭一个 Oracle 的 cursor。
  语法: int ora_close(int cursor);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数将 ora_open() 打开的游标 (cursor) 关闭。若成功则返回 true,反之返回 false。  要处理详细的错误信息可使用 ora_error() 及 ora_errorcode()。

  Ora_ColumnName 得到 Oracle 返回列 (Column) 的名称。
  语法: string Ora_ColumnName(int cursor, int column);
  返回值: 字符串
  函数种类: 数据库功能
  内容说明: 本函数返回的名称全都转成英文大写字母。

  Ora_ColumnType 得到 Oracle 返回列 (Column) 的类型。
  语法: string Ora_ColumnType(int cursor, int column);
  返回值: 字符串
  函数种类: 数据库功能
  内容说明: 返回的类型值为下面类型之一:

  VARCHAR2
  VARCHAR
  CHAR
  NUMBER
  LONG
  LONG RAW
  ROWID
  DATE
  CURSOR

  Ora_Commit 将 Oracle 的交易处理付诸实行。
  语法: int ora_commit(int conn);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。本函数会将最近一次 commit/rollback 后的交易 (transaction) 做永久性的修改,当与 Oracle 数据库连接确认后自动执行功能 (autocommit) 会关闭。

  Ora_CommitOff 关闭自动执行 Oracle 交易改动的功能。
  语法: int ora_commitoff(int conn);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。在每次使用 ora_exec() 之后,本函数会关闭自动执行功能。

  Ora_CommitOn 打开自动执行 Oracle 交易改动的功能。
  语法: int ora_commiton(int conn);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。在每次使用 ora_exec() 后的连接时,本函数会打开自动执行功能。

Ora_Error 获得 Oracle 错误信息。
  语法: string Ora_Error(int cursor);
  返回值: 字符串
  函数种类: 数据库功能
  内容说明: 返回类似 XXX-NNNNN 格式的错误信息,其中的 XXX 表示错误发生的地方 NNNNN 用来验证错误的信息。在 UNIX 版的 Oracle 上,可以找到类似以下的错误信息详细说明:

   oerr ora 00001
  00001, 00000, "unique constraint (%s.%s) violated"
  // *Cause: An update or insert statement attempted to insert a duplicate key
  // For Trusted ORACLE configured in DBMS MAC mode, you may see
  // this message if a duplicate entry exists at a different level.
  // *Action: Either remove the unique restriction or do not insert the key

  Ora_ErrorCode 获得 Oracle 错误代码。
  语法: int Ora_ErrorCode(int cursor);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回数字类型的错误代码。

  Ora_Exec 执行 Oracle 的指令部分。
  语法: int ora_exec(int cursor);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。

  Ora_Fetch 取得返回资料的一列 (row)。
  语法: int ora_fetch(int cursor);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回值 true 表示成功取回一列,false 表示本列是空的或发生其它错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。若没有发生错误,ora_errorcode() 会返回 0。

  Ora_GetColumn 从返回列 (row) 的资料取得一栏 (column)。
  语法: mixed ora_getcolumn(int cursor, mixed column);
  返回值: 混合类型资料
  函数种类: 数据库功能
  内容说明: 返回一栏资料。若发生错误,ora_errorcode() 会返回非 0 的数值。值得注意的是,若返回的是空的字符串,或者返回整数 0,均不算错误,程序中必须自行处理这种情形。

  Ora_Logoff 结束与 Oracle 的链接。
  语法: int ora_logoff(int connection);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 返回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。本函数会登出数据库 (Logout) 并结束与 Oracle 服务器的链接。

  Ora_Logon 打开与 Oracle 的链接。
  语法: int ora_logon(string user, string password);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数使 PHP 与 Oracle 建立链接。亦可以利用 SQL*Net 提供的 TNS name 链接到远端的数据库,方法如下:

   $conn = Ora_Logon("user@TNSNAME", "pass");

  连接成功会返回整数的索引值,返回 false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。对美国以外的国家,数据库中可能会有非 ASCII 字符的情形,这时需要在环境变量中加入 NLS_LANG 的变量。例如:若查询返回资料中有中文 BIG5 码的资料,在 ora_logon() 之前加入以下的程序码
putenv("NLS_LANG=american_taiwan.zht16big5");

  使用范例 pwalker@pwccanada.com (21-Sep-1998) 提供了这二个范例
  1. 连接到与 Web 服务器同一台的 Oracle 数据库可用
      Ora_Logon("system" , "manager"); 或
    Ora_Logon("system/manager" , "");
  ?>
  2. 连接到远端 Oracle 服务器要利用 SQL*Net 或 Net8
      Ora_Logon("system/manager@host" , "");
  ?>

  Ora_Open 打开 Oracle 的 cursor。
  语法: int ora_open(int connection);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数使与 Oracle 连接并打开 cursor。连接成功会返回 cursor 的索引值,返回 false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。

  Ora_Parse 分析 SQL 语法。
  语法: int ora_parse(int cursor_ind, string sql_statement, int defer);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数可用来分析 SQL 语法或是 PL/SQL 部分是否有错误。返回 0 表示无误,返回为 -1 表示有错误发生。

  Ora_Rollback 撤消当前交易。
  语法: int ora_rollback(int connection);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数取消 Oracle 交易处理 (transaction) 对数据库所做的修改。若成功则返回 true,反之返回 false。要处理详细的错误信息可使用 ora_error() 及 ora_errorcode()。

  Ora_Do 快速的 SQL 查询。
  语法: Ora_Do($conn, $query);
  函数种类: 数据库功能
  内容说明: kk@shonline.de (05-Aug-1998) 指出以上 17 个 PHP 的官方公布的函数是 PHP2 就有的,没有加入 PHP3 的新函数。本函数开始是 kk@shonline.de 所整理的函数。本函数结合了 Ora_Parse(), Ora_Exec(), Ora_Fetch() 等功能,提供一次快速的 SQL 查询。

  Ora_FetchInto 取回 Oracle 资料放入数组。
  语法: Ora_FetchInto($curs, &$ary);
  函数种类: 数据库功能
  内容说明: 本函数将对 Oracle 取回的资料放入数组 ary 中。返回每列的字段数目,若失败则返回 false。

  Ora_ColumnSize 取得字段类型的大小。
  语法: ora_columnsize($curs, $colindex);
  函数种类: 数据库功能
  内容说明: 本函数可以取得字段 (column) 类型 (type) 的大小。计算从 0 开始。

  Ora_Numcols 取得字段的数目。
  语法: ora_numcols($curs);
  函数种类: 数据库功能
  内容说明: 本函数返回字段 (column) 的数目。这个函数只在执行了 ora_parse()/ora_exec()/ora_fetch() 或是 ora_do() 才有用。

  Ora_PLogon 打开与 Oracle 的长期链接。
  语法: int ora_plogon(string user, string password);
  返回值: 整数
  函数种类: 数据库功能
  内容说明: 本函数使 PHP 与 Oracle 建立链接,功能与 ora_logon() 函数类似,但使用本函数会一直与数据库连接直到停止 Apache 服务器,这会使与 Oracle 连接速度更快,但需要更多的内存。亦可参考 mysql_pconnect() 获得更多的细节资料。
文章评论

共有 0 条评论