从此不求人:自主研发一套PHP前端开发框架(15)

链接Oracle(windows 版本)

一些必要的支持

1.php连接oracle 需要下载oracle客户端(如在百度中搜索“ora10client”关键字)
2.安装好后需要打开php_oci8.dll拓展支持
3.重启apache 后我们就可以写代码了

新建连接

$this->_db=NewADOConnection(‘oci8’);
在我们下载的adodb的驱动文件中可以找到 adodb-oci8.inc.php

设置编码

$this->_db->charSet=”UTF8”;
这一步很重要。Oracle如果你使用默认安装会用简体中文编码。如果你的php使用的是utf8,那么传输过来的数据就会呈现乱码。
注意要写成UTF8而不是utf-8

配置一个连接字符串

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=实例名)(SERVER=DEDICATED))

连接数据库

$this->_db->connect(false, 这里写上用户名, 这里写上用户密码, “(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=实例名)(SERVER=DEDICATED))”)

myDataBase.php 代码:

<?php
 require("adodb.inc.php");
 class myDataBase 
 {
    //数据库处理类

    public $_dbAddr="localhost"; //数据库服务器IP 
    public $_dbName="onethink"; //数据库名
    public $_dbUser="root"; //用户名
    public $_dbPwd="root";//密码
    public $_dbType='mysqli';//默认使用mysqli 还可以支持 mssql oracle 等等
    //mssql
    public $_dbUser_Mssql ='root';
    public $_dbPwd_Mssql = 'root';
    public $_dbInstance_Mssql ='sa';
    public $_dbAddr_Mssql ='localhost';
    //oracle
    public $_dbUser_Oracle ='root';
    public $_dbPwd_Oracle = 'root';
    public $_dbInstance_Oracle ='sa';

    public $_db=false; //内部实例化过后的数据库连接对象



    function myDataBase($dbtype='mysqli') // __construct
    {
        $this->_dbType = $dbtype ? $dbtype :'mysqli';
        //写一些数据库  connect 过程 
        $this->initConnect();
    }
    function __destruct() //析构函数
    {
         if($this->_db && $this->_db->IsConnected())
         {
            $this->_db->disconnect();
            unset($this->_db);
         }
    }
    function initConnect()
    {
      switch ($this->_dbType) {
        case 'mysqli':
          //mysql 连接方式
          //sqlserver和oracle略有不同,后面再讲
          $this->_db=NewADOConnection("mysqli");//php5 之后的增强版驱动
          $this->_db->connect($this->_dbAddr,$this->_dbUser,$this->_dbPwd,$this->_dbName);
          $this->_db->Query("set names utf8"); //客户端编码
          $this->_db->SetFetchMode(ADODB_FETCH_ASSOC);  //执行查询 返回的数组的key 就是字段名
          break;
        case 'mssql':
          $this->_db=NewADOConnection("mssqlnative");//php5 之后的增强版驱动
          $this->_db->connect($this->_dbAddr_Mssql,$this->_dbUser_Mssql,$this->_dbPwd_Mssql,$this->_dbInstance_Mssql);
          break;
        case 'oracle':
          //使用oracle数据库
          $this->_db=NewADOConnection('oci8');
          $this->_db->charSet="UTF8";
          $this->_db->connect(false, $this->_dbUser_Oracle, $this->_dbPwd_Oracle, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=".$this->_dbInstance_Oracle.")(SERVER=DEDICATED))");
          break;
        default:
          //empty code here!
          break;
      }
    }

    function execForNothing($sql)// 执行一个sql语句,不返回任何值
    {
         $this->_db->Execute($sql);
    }
    function execForArray($sql)
    {
        //执行一个sql语句 ,返回类型是数组

        $result=$this->_db->Execute($sql);

        if($result)
        {
            $returnArray=array();
            while(!$result->EOF)
            {
                $returnArray[]=$result->fields;
                $result->MoveNext();
            }
            return  $returnArray;
        }
        else
            return  false;
    }
    function execForOne($sql)
    {
      //执行一个sql语句 ,返回 单列字符串
      $result=$this->_db->GetOne($sql); //adodb的函数,来获取单个值
      return $result;
    }
    function execForTrac($sqllist,$resulttype) //用事务 来执行
    {

        //$sqllist 参数 是sql数组
        $type=array("none","string","array","int"); //返回类型
        if(!in_array($resulttype,$type)) return false;
        if(count($sqllist)==0) return false;
        $this->_db->BeginTrans(); //开启事务
        $sqlindex=0;
        $ret=false;
        foreach($sqllist as $sql)
        {
            if($sqlindex==(count($sqllist)-1)) //最后一个语句 需要根据返回类型来做不同的处理
            {
                 if($resulttype=="none")
                 {
                      $this->_db->Execute($sql);
                 }
                  else if($resulttype=="array")
                  {
                    $ret=$this->execForArray($sql);
                  }
                  else if($resulttype=="int" || $resulttype=="string")
                  {

                    $ret=$this->execForOne($sql);
                  }
                    else
                    {
                         $ret=$this->execForArray($sql);
                    }

            }
            else
            $this->_db->Execute($sql);
            $sqlindex++;
        }
        if($ret){
          $this->_db->CommitTrans();
        }else{
          $this->_db->RollbackTrans();
        }
        return $ret;
    }

 }



?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值