操作Oracle的php类

<?
//【警告】:未经许可请勿随便修改
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//   
// 【文件名】:                c_ora_db.inc
// 【作  用】:                Oracle公用函数类
// 【作  者】:                天灰
//  
// 【最后修改日期】:        2001/05/11[cxx]      
// 【变量定义规则】:‘C_'=字符型,‘I_'=整型,‘N_'=数字型,‘L_'=布尔型,‘A_'=数组型
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//    ※db_logon()                    开启数据库连接     
//    ※db_query()                    通用select             
//    ※db_change()                    数据库改变的通用函数(insert,delete,update)
//    ※db_insert()                    insert,直接调用db_change()
//    ※db_delete()                    delete,直接调用db_change()
//    ※db_update()                    update,直接调用db_change()                 
//    ※db_commit()                    事务递交
//    ※db_rollback()                    事务回退
//    ※db_logoff()                    断开数据库连接
//------------------------------------------------------------------------------------------

Class c_ora_db
{

//------------------------------------------------------------------------------------------
//        变量定义
//------------------------------------------------------------------------------------------
    var $C_user          = "";              //数据库用户名
    var $C_passwd        = "";            //数据库口令
    var $C_db            = "";                    //数据库名
    var $I_linkID        = 0;                          //连线句柄
    var $I_stmtID        = 0;                          //查询句柄
    var $color             ="";                    //全局颜色
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_logon()
//        作  用:开启数据库连接
//        参  数:无
//        返回值:连线句柄(整型)
//        备  注:无
//------------------------------------------------------------------------------------------
    function  db_logon()    
    {    
        $this->I_linkID =  @OCILogon($this->C_user,$this->C_passwd,$this->C_db);
        if ($this->I_linkID == 0){AlertExit('数据库链接失败,请与DBA联系!');}
        return  $this->I_linkID;    
    }
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
//        作  用:select
//        参  数:$C_sql                    sql语句
//                $A_define                需绑定的字段。数组型         
//                $I_start                开始取记录 -1则取出查询的所有记录
//                $I_end                    结束取纪录
//        返回值:二维数组($A_rs)
//        备  注:通过数字0,1,2....可访问对应字段的值; 或通过查询字段名也可访问对应字段的值
//                如通过$A_rs[0][0]或$A_rs[0]['NAME']或$A_rs[0]['name']都可访问首条记录NAME字段
//                $I_start,$I_end是配合分页使用的参数。
//------------------------------------------------------------------------------------------
    function  db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
    {    
       if (!$C_sql){AlertExit("参数不全!");}//检查参数

//连接检测
       if ($this->I_linkID == 0){AlertExit('数据库链接失败,请与DBA联系!');}

//格式检测
       $this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);     
       if (!$this -> I_stmtID){AlertExit(' sql格式出错!请与程序员联系');}

//如果没指定绑定的字段,则从SQL语句中去取
       if($A_define=="")
       {
            $A_Cur = explode("select",$C_sql);
            $A_Cur = explode("from",$A_Cur[1]);
            $A_define = explode(",",$A_Cur[0]);
       }

//绑定数据库表字段
        if(gettype($A_define) == "array")            //查询列是数组
        {
            for($i=0;$i<count($A_define);$i++)
            {
                $A_define_up[$i] = trim(strtoupper($A_define[$i]));    //大写并去除空格
            }
            for($i=0;$i<count($A_define_up);$i++)
            {
                OCIDefineByName($this -> I_stmtID,"$A_define_up[$i]",&$$A_define[$i]);    //绑定
            }
        }
        elseif(trim($A_define) <> "")                //查询列只有一个
        {
            $A_define_up = trim(strtoupper($A_define));
            OCIDefineByName($this -> I_stmtID,"$A_define_up",&$$A_define);
        }

//执行绑定好的SQL语句
        if(!OCIExecute($this -> I_stmtID))
        {
            echo "<font color=red><b>执行出错:</b></font>SQL Error:<font color=red>$C_sql</font><br>";
            return false;
        }

$lower = 0;                    //返回二维数组的第一维下标控制变量
        $cnt = 0;                    //开始取数标识

//取记录
        while (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
        {
            //取查询出来的所有记录
            if ($I_start == -1)
            {
                if (gettype($A_define) == "array")        //查询列是数组
                {
                    for ($i=0;$i<count($A_define);$i++)
                    {
                        if ($cur[$A_define_up[$i]] <> $$A_define[$i])
                        {
                            $$A_define[$i] = $cur[$A_define_up[$i]];     
                        }
                        $A_rs[$lower][$i] = $$A_define[$i];                    //用数字访问
                        $A_rs[$lower][$A_define[$i]] = $$A_define[$i];        //用小些访问
                        $A_rs[$lower][$A_define_up[$i]] = $$A_define[$i];    //用大写访问
                    }         
                }
                elseif (trim($A_define) <> "")            //查询列只有一个
                {

if ($cur[$A_define_up] <> $$A_define)
                    {
                        $$A_define = $cur[$A_define_up];     
                    }
                    $A_rs[$lower][0] = $$A_define;                    //用数字访问
                    $A_rs[$lower][$A_define] = $$A_define;        //用小写访问
                    $A_rs[$lower][$A_define_up] = $$A_define;    //用大些访问
                }
                $lower++;            //下标加一
            }

//取出指定记录(配合分页使用)
            if ($I_start <> -1)
            {
                if ($cnt >= $I_start)
                {
                    $cnt++;
                    if ($I_end - $I_start <> 0)
                    {
                        $I_end--;
                            if (gettype($A_define) == "array")
                            {
                                for($i=0;$i<count($A_define_up);$i++)
                                {
                                    if ($cur[$A_define_up[$i]] <> $$A_define[$i])
                                    {
                                        $$A_define[$i] = $cur[$A_define_up[$i]];     
                                    }
                                    $A_rs[$lower][$i] = $$A_define[$i];                    //用数字访问
                                    $A_rs[$lower][$A_define[$i]] = $$A_define[$i];        //用小些访问
                                    $A_rs[$lower][$A_define_up[$i]] = $$A_define[$i];    //用大写访问
                                }
                            }elseif(trim($A_define) <> "")
                            {
                                if ($cur[$A_define_up] <> $$A_define)
                                {
                                    $$A_define = $cur[$A_define_up];     
                                }
                                $A_rs[$lower][0] = $$A_define;                    //用数字访问
                                $A_rs[$lower][$A_define] = $$A_define;        //用小些访问
                                $A_rs[$lower][$A_define_up] = $$A_define;    //用大写访问                     
                            }
                        $lower++;
                    }else
                    {
                        break;        //如果$I_end-$I_start=0  表示取完记录并跳出while循环
                    }     
                }else
                {
                    $cnt++;        //如果$cnt<$I_start,$cnt++
                }                 
            }

}     //while的结束

//释放句柄并返回查询数据(一个二维数组)
        OCIFreestatement($this -> I_stmtID);
        return $A_rs;

} //function的结束
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_change($C_sql,$A_bind)
//        作  用:db change
//        参  数:$C_sql                        sql语句
//                $A_bind                        需绑定的字段。数组型         
//        返回值:布尔值
//        备  注:insert,delete,update通用
//------------------------------------------------------------------------------------------
    function db_change($C_sql,$A_bind="")
    {
        if (!$C_sql){AlertExit("参数不全!");}//检查参数

//连接检测
        if($this -> I_linkID==""){    AlertExit("我们的数据库正忙,请稍后再连接!");}

//格式检测
        $this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);     
        if (!$this -> I_stmtID){AlertExit(' sql格式出错!请与程序员联系');}

//绑定
        if(gettype($A_bind) == "array")
        {
            for($i=0;$i<count($A_bind);$i++)
            {
                global $$A_bind[$i];
                $$A_bind[$i] = StripSlashes($$A_bind[$i]);            //去掉反斜线字元
                $$A_bind[$i] = str_replace("<?","< ?",$$A_bind[$i]);    //过滤掉PHP标示
            }
            for($i=0;$i<count($A_bind);$i++){
                OCIBindByName($this -> I_stmtID, ":$A_bind[$i]", &$$A_bind[$i], -1);  //绑定
            }
        }
        elseif(trim($A_bind) <> "")                                //不是数组,是字符
        {
            global $$A_bind;
            $$A_bind = StripSlashes($$A_bind);
            $$A_bind = str_replace("<?","< ?",$$A_bind);                //过滤掉PHP标示
            OCIBindByName($this -> I_stmtID, ":$arrBind", &$$A_bind, -1);                 
        }

//执行并检测是否成功
        if(!OCIExecute($this -> I_stmtID,OCI_DEFAULT))
        {
            echo "<font color=red><b>执行出错:</b></font>SQL Error:<font color=red>$C_sql</font><br>";
            return false;
        }

/*//传回受影响的行数
        global $I_changenum;
        $I_changenum = OCINumrows($this -> I_stmtID);*/

//释放句柄,传回值
        OCIFreeStatement($this -> I_stmtID);
        return true;
    }
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_delete($C_sql)
//        作  用:delete
//        参  数:C_sql                    sql语句
//        返回值:布尔值
//        备  注:该函数只是为了使用直观,本质调用db_change()
//------------------------------------------------------------------------------------------
    function db_delete($C_sql)
    {
        return $this -> db_change($C_sql);
    }
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_insert($C_sql,A_bind)
//        作  用:insert
//        参  数:C_sql                    sql语句
//                A_bind                    绑定
//        返回值:布尔值
//        备  注:该函数只是为了使用直观,本质调用db_change()
//------------------------------------------------------------------------------------------
    function db_insert($C_sql,$A_bind="")
    {
        return $this -> db_change($C_sql,$A_bind);
    }
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_update($C_sql,A_bind)
//        作  用:update
//        参  数:C_sql                    sql语句
//                A_bind                    绑定
//        返回值:布尔值
//        备  注:该函数只是为了使用直观,本质调用db_change()
//------------------------------------------------------------------------------------------
    function db_update($C_sql,$A_bind="")
    {
        return $this -> db_change($C_sql,$A_bind);
    }
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_commit()
//        作  用:事务递交
//        参  数:无
//        返回值:布尔值
//        备  注:无
//------------------------------------------------------------------------------------------     
    function db_commit()
    {
        return    (OCICommit($this->I_linkID));
    }     
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_rollback()
//        作  用:事务回退
//        参  数:无
//        返回值:布尔值
//        备  注:无
//------------------------------------------------------------------------------------------     
    function db_rollback()
    {
        return  (OCIRollback($this->I_linkID));
    }     
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
//        函数名:db_logoff()
//        作  用:断开数据库连接
//        参  数:无
//        返回值:布尔值
//        备  注:无
//------------------------------------------------------------------------------------------     
    function db_logoff()
    {
        return (OCILogoff($this->I_linkID));
    }
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
}
?>

(0)

相关推荐

  • ThinkPHP 连接Oracle数据库的详细教程[全]

    一. 操作环境搭建 系统:Windows7 旗舰版 64位PHP环境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24  32位版下载地址:http://www.wampserver.com/en/ ThinkPHP:3.0正式版下载地址:http://thinkphp.cn/down.html Oracle:Orcale_11gR2  32位版下载地址:http://www.oracle.com/technetwork/cn/indexes/dow

  • 用PHP调用Oracle存储过程的方法

    但是使用存储过程至少有两个最明显的优点:速度和效率.使用存储过程的速度显然更快.在效率上,如果应用一次需要做一系列sql操作,则需要往返于php与oracle,不如把该应用直接放到数据库方以减少往返次数,增加效率.但是在internet应用上,速度是极度重要的,所以很有必要使用存储过程.偶也是使用php调用存储过程不久,做了下面这个列子. 代码 复制代码 代码如下: //建立一个test表 create table test ( id number(16) not null, name varc

  • 用PHP调用Oracle存储过程

    PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护.但是使用存储过程至少有两个最明显的优点:速度和效率.使用存储过程的速度显然更快.在效率上,如果应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方以减少往返次数,增加效率.但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程.偶也是使用

  • PHP下的Oracle客户端扩展(OCI8)安装教程

    最近的项目需要用php访问oracle数据库,不得不在linux下给php安装oci8扩展.php也可以使用pdo访问oracle数据库,但还是需要安装客户端. 首先到oracle官网的这个页面下载相关的文件,注意要连数据库服务器的版本,一定要对应,否则安装成功也会连不上,同时也要区分32位.64位服务器,比如我要连的数据库服务器是oracle10.2.0.4,64位主机,那么我要下载下面三个文件: 复制代码 代码如下: oracle-instantclient-basic-10.2.0.4-1

  • Linux+php+apache+oracle环境搭建之CentOS下源码编译安装PHP

    首先需要安装下面几个安装包,可以在CD-ROM数据源里找到以下安装包yum安装 yum install perl* freetype libpng* libxm2 libxm2-devel curl curl-devel libjpeg* 手动下载安装 jpegsrc.v8c.tar libmcrypt-2.5.8.tar.gz 安装 jpegsrc # tar -xvzf jpegsrc.v8c.tar # cd jpeg-8c # ./configure --prefix=/usr/loca

  • PHP处理Oracle的CLOB实例

    本文实例简述了PHP处理Oracle的CLOB的方法.分享给大家供大家参考.具体方法如下: 1. 写入数据   在使用PDO的预处理方法时,如果使用bindParam()等而不指定字段的数据类型或使用execute(),PDO都会默认为string类型,并且限定一个默认长度 所以在存clob类型字段时必须使用bindParam()或bindValue()等,并指定字符串长度,例如: 复制代码 代码如下: $pdo -> bindParam(':clobData', $clobData, PDO:

  • php 访问oracle 存储过程实例详解

    php 访问oracle 存储过程实例详解 比如我的本地Oracle数据库有一个package,里面有一个存储过程: create or replace package PKG_TRANS_REL is -- Author : test -- Created : -- Purpose : test -- Public type declarations PKG_NAME varchar2(20) := 'PKG_TRANS_REL'; --存储过程,测试用 procedure pro_GC_wi

  • 用PHP连接Oracle数据库

    通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据.MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程.MySQL是免费的,这一点也许就吸引了不少人.由于其广泛应用,我就不想在这里赘述MySQL的使用方法了.Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接.我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围. PHP提供了两套函数与Oracle连接,分别

  • php连接oracle数据库及查询数据的方法

    本文实例讲述了php连接oracle数据库及查询数据的方法.分享给大家供大家参考.具体分析如下: php有强大的功能不但可以支持mysql,mssql,mysqli之个我们还可以与oracle数据连接,要让php支持oracle非常的简单我们只要把php.ini中的;extention = php_oci8.dll分号去掉即可. php支持oracle连接函数 php.ini文件中的配置,去掉 ;extention = php_oci8.dll,去掉前面的分号,重启apache就可以了,如果不行

  • php+oracle 分页类

    example.php 复制代码 代码如下: <?php $conn = ociplogon("test","123456","test123"); include_once "pager.inc.php"; ?> 复制代码 代码如下: <?php /** 分页测试开始 */ // {{{ 初始分页对象 $pager = new pager(); /** 将 select id,name,age from t

随机推荐