叁柒設計 三七设计 Three seven design 我的学习与分享
详细信息
来自:关键字:

PHP4手册:函数库及函数(三十八) Oracle 资料库函式库

  December 21th,2008 22:39:58   Category : PHP+Mysql
 Click (503)

--------------------------------------------------------------------------------
 Oracle 资料库函式库 
--------------------------------------------------------------------------------
 


本函式库共有 22 个函式
要使用这个函式库,要在安装 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\n\n";
$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  "\nROWS 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() 
--------------------------------------------------------------------------------
 


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 资料库函式库


Ora_Close
关闭一个 Oracle 的 cursor。

语法: int ora_close(int cursor);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


本函式将 ora_open() 开启的游标 (cursor) 关闭。若成功则传回 true,反之传回 false。要处理细部的错误讯息可使用 ora_error() 及 ora_errorcode()。

 

--------------------------------------------------------------------------------
 函式:Ora_ColumnName() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_ColumnName
得到 Oracle 传回列 (Column) 的名称。

语法: string Ora_ColumnName(int cursor, int column);

传回值: 字串

函式种类: 资料库功能


 
 
内容说明 


本函式传回的名称全都转成英文大写字母。

 

--------------------------------------------------------------------------------
 函式:Ora_ColumnType() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_ColumnType
得到 Oracle 传回列 (Column) 的型态。

语法: string Ora_ColumnType(int cursor, int column);

传回值: 字串

函式种类: 资料库功能


 
 
内容说明 


传回的型态值为下面型态之一:


VARCHAR2 
VARCHAR 
CHAR 
NUMBER 
LONG 
LONG RAW 
ROWID 
DATE 
CURSOR 
 

--------------------------------------------------------------------------------
 函式:Ora_Commit() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Commit
将 Oracle 的交易处理付诸实行。

语法: int ora_commit(int conn);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。本函式会将最近一次 commit/rollback 后的交易 (transaction) 做永久性的修改,当与 Oracle 资料库连线确认后自动执行功能 (autocommit) 会关闭。

 

--------------------------------------------------------------------------------
 函式:Ora_CommitOff() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_CommitOff
关闭自动执行 Oracle 交易更动的功能。

语法: int ora_commitoff(int conn);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。在每次使用 ora_exec() 之后,本函数会关闭自动执行功能。

 

--------------------------------------------------------------------------------
 函式:Ora_CommitOn() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_CommitOn
打开自动执行 Oracle 交易更动的功能。

语法: int ora_commiton(int conn);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。在每次使用 ora_exec() 后的连线时,本函数会打开自动执行功能。
 

--------------------------------------------------------------------------------
 函式:Ora_Error() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


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 资料库函式库


Ora_ErrorCode
获得 Oracle 错误代码。

语法: int Ora_ErrorCode(int cursor);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回数字型态的错误代码。

 

--------------------------------------------------------------------------------
 函式:Ora_Exec() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Exec
执行 Oracle 的指令区段。

语法: int ora_exec(int cursor);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。

 

--------------------------------------------------------------------------------
 函式:Ora_Fetch() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Fetch
取得传回资料的一列 (row)。

语法: int ora_fetch(int cursor);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回值 true 表示成功取回一列,false 表示本列是空的或发生其它错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。若没有发生错误,ora_errorcode() 会传回 0。

 

--------------------------------------------------------------------------------
 函式:Ora_GetColumn() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_GetColumn
从传回列 (row) 的资料取得一栏 (column)。

语法: mixed ora_getcolumn(int cursor, mixed column);

传回值: 混合型态资料

函式种类: 资料库功能


 
 
内容说明 


传回一栏资料。若发生错误,ora_errorcode() 会传回非 0 的数值。值得注意的是,若传回的是空的字串,或者传回整数 0,均不算错误,程式中必须自行处理这种情形。

 

--------------------------------------------------------------------------------
 函式:Ora_Logoff() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Logoff
结束与 Oracle 的连结。

语法: int ora_logoff(int connection);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


传回值 true 表示成功,false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。本函式会登出资料库 (Logout) 并结束与 Oracle 伺服器的连结。

 

--------------------------------------------------------------------------------
 函式:Ora_Logon() 
--------------------------------------------------------------------------------
 


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 资料库函式库


Ora_Open
开启 Oracle 的 cursor。

语法: int ora_open(int connection);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


本函式使与 Oracle 连线并打开 cursor。连线成功会传回 cursor 的索引值,传回 false 表示发生错误。详细的错误纠错可以使用 ora_error() 及 ora_errorcode()。

 

--------------------------------------------------------------------------------
 函式:Ora_Parse() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Parse
分析 SQL 语法。

语法: int ora_parse(int cursor_ind, string sql_statement, int defer);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


本函式可用来分析 SQL 语法或是 PL/SQL 区段是否有错误。传回 0 表示无误,传回为 -1 表示有错误发生。

 

--------------------------------------------------------------------------------
 函式:Ora_Rollback() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Rollback
撤消当前交易。

语法: int ora_rollback(int connection);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


本函式取消 Oracle 交易处理 (transaction) 对资料库所做的修改。若成功则传回 true,反之传回 false。要处理细部的错误讯息可使用 ora_error() 及 ora_errorcode()。

 

--------------------------------------------------------------------------------
 函式:Ora_Do() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


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
取回 Oracle 资料放入阵列。

语法: Ora_FetchInto($curs, &$ary);

函式种类: 资料库功能


 
 
内容说明 


本函式将对 Oracle 取回的资料放入阵列 ary 中。传回每列的栏位数目,若失败则传回 false。

 

--------------------------------------------------------------------------------
 函式:Ora_ColumnSize() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_ColumnSize
取得栏位型态的大小。

语法: ora_columnsize($curs, $colindex);

函式种类: 资料库功能


 
 
内容说明 


本函式可以取得栏位 (column) 型态 (type) 的大小。计算从 0 开始。
 

--------------------------------------------------------------------------------
 函式:Ora_Numcols() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_Numcols
取得栏位的数目。

语法: ora_numcols($curs);

函式种类: 资料库功能


 
 
内容说明 


本函式传回栏位 (column) 的数目。这个函式只在执行了 ora_parse()/ora_exec()/ora_fetch() 或是 ora_do() 才有用。

 

--------------------------------------------------------------------------------
 函式:Ora_PLogon() 
--------------------------------------------------------------------------------
 


Oracle 资料库函式库


Ora_PLogon
开启与 Oracle 的长期连结。

语法: int ora_plogon(string user, string password);

传回值: 整数

函式种类: 资料库功能


 
 
内容说明 


本函式使 PHP 与 Oracle 建立连结,功能与 ora_logon() 函式类似,但使用本函式会一直与资料库连线直到停止 Apache 伺服器,这会使与 Oracle 连线速度更快,但需要更多的记忆体。亦可参考 mysql_pconnect() 获得更多的细节资料。

[ 资讯评论 ]
暂时没有任何评论!
[ 提交评论 ]
请选择表情
  • 昵称:
  • *
  • 验证码:
  • *点击更换验证码
  • 尚能输入个字符
申明:本网站部分分享内容来自网络,如有侵权请及时与我联系,谢谢,另网友评论仅代表个人观点,与本站立场无关,如果在评论中发表违反我国任何法律的,请即时与我们联系(QQ:77132915),我们将立即予以删除. [ 注:提交评论后,通过审核后方能在网站上显示!]