ここから求めない:自主的にPHP先端開発フレームワークを開発する(11)

10309 ワード

フレーム全体で
往々にして私たちはデータベースの呼び出しをする必要があります.この時、私たちは拿来主義を採用しなければなりません(後でお客様が突然データベースを交換したとき、移植を容易にすることができます).汎用(仕様呼び出し方式)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/>';
          }