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

在整个框架中

往往我们需要做数据库的调用,这时我们应该采用拿来主义(以后客户突然换掉数据库的时候可以很方便进行移植)
1.通用(规范调用方式)
2.方便系统移植
3.多数据库易切换
4.第三方的类库足够优秀的让我们可以暂时不用学习

第三方类库使用adodb php的版本

代码(myDataBase.php)

<?php require("adodb.inc.php"); class myDataBase { //数据库处理类 public $_dbAddr="localhost"; //数据库服务器IP  public $_dbName="onethink"; //数据库名 public $_dbUser="root"; //用户名 public $_dbPwd="root";//密码 public $_db=false; //内部实例化过后的数据库连接对象 function myDataBase() // __construct { //写一些数据库 connect 过程  $this->initConnect(); } function __destruct() //析构函数 { if($this->_db && $this->_db->IsConnected()) { $this->_db->disconnect(); unset($this->_db); } } function initConnect() { //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 就是字段名 } 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++; } $this->_db->CommitTrans(); return $ret; } } ?>

functions.php下面增加的load_db方法

<?php function load_db(){ $db_path=LKPHP_PATH.'/Libary/DataBase/myDataBase.php'; if(!class_exists('myDataBase')){ require($db_path); } return new MyDataBase(); } ?>

测试用例:

 //测试下数据库操作
          $db = load_db();
          $newslist=$db->execForArray('select * from onethink_action');
          header('Content-Type:text/html;charset=utf8');
          foreach ($newslist as $value) {
             echo '标题:'.$value['title'].' 标注:'.$value['remark'].'<br/>';
          }

你可能感兴趣的:(从此不求人:自主研发一套PHP前端开发框架(11))