封裝自己的DB類(PHP),封裝db類php_PHP教程

來源:互聯網
上載者:User

封裝自己的DB類(PHP),封裝db類php


封裝一個DB類,用來專門操作資料庫,以後凡是對資料庫的操作,都由DB類的對象來實現。這樣有了自己的DB類,寫項目時簡單的sql語句就不用每次寫了,直接調用就行,很方便!

1.封裝一個DB類。一個類檔案應該只有一個類,其他的內容全部都沒有。類檔案的命名規則:類名.class.php

下面是建立DB類的代碼:

php    //封裝一個DB類,用來專門操作資料庫,以後凡是對資料庫的操作,都由DB類的對象來實現    class DB{        //屬性        private $host;        private $port;        private $user;        private $pass;        private $dbname;        private $charset;        private $prefix;            //表首碼        private $link;                //串連資源(串連資料庫,一般會返回一個資源,所以需要定義一個link屬性)        //構造方法(作用:為了初始化對象的屬性),會被自動調用        /*         * @param1 array $arr,預設為空白,裡面是一個關聯陣列,裡面有7個元素         * array('host' => 'localhost','port' => '3306');         */        public function __construct($arr = array()){            //初始化            $this->host = isset($arr['host']) ? $arr['host'] : 'localhost';//先判斷是否有自己的host,如果有就用自己的host,否則就使用預設的localhost            $this->port = isset($arr['port']) ? $arr['port'] : '3306';            $this->user = isset($arr['user']) ? $arr['user'] : 'root';            $this->pass = isset($arr['pass']) ? $arr['pass'] : 'root';            $this->dbname = isset($arr['dbname']) ? $arr['dbname'] : 'mydatabase';            $this->charset = isset($arr['charset']) ? $arr['charset'] : 'utf8';            $this->prefix = isset($arr['prefix']) ? $arr['prefix'] : '';            //串連資料庫(類是要操作資料庫,因此要串連資料庫)            $this->connect();            //設定字元集            $this->setCharset();            //選擇資料庫            $this->setDbname();        }        /*         * 串連資料庫        */        private function connect(){            //mysql擴充串連            $this->link = mysql_connect($this->host . ':' . $this->port,$this->user,$this->pass);            //判斷結果            if(!$this->link){                //結果出錯了                //暴力處理,如果是真實線上項目(生產環境)必須寫入到記錄檔                echo '資料庫連接錯誤:
'; echo '錯誤編號' . mysql_errno() . '
'; echo '錯誤內容' . mysql_error() . '
'; exit; } } /* * 設定字元集 */ private function setCharset(){ //設定 $this->db_query("set names {$this->charset}"); } /* * 選擇資料庫 */ private function setDbname(){ $this->db_query("use {$this->dbname}"); } /* * 增加資料 * @param1 string $sql,要執行的插入語句 * @return boolean,成功返回是自動成長的ID,失敗返回FALSE */ public function db_insert($sql){ //發送資料 $this->db_query($sql); //成功返回自增ID return mysql_affected_rows() ? mysql_insert_id() : FALSE; } /* * 刪除資料 * @param1 string $sql,要執行的刪除語句 * @return Boolean,成功返回受影響的行數,失敗返回FALSE */ public function db_delete($sql){ //發送SQL $this->db_query($sql); //判斷結果 return mysql_affected_rows() ? mysql_affected_rows() : FALSE; } /* * 更新資料 * @param1 string $sql,要執行的更新語句 * @return Boolean,成功返回受影響的行數,失敗返回FALSE */ public function db_update($sql){ //發送SQL $this->db_query($sql); //判斷結果 return mysql_affected_rows() ? mysql_affected_rows() : FALSE; } /* * 查詢:查詢一條記錄 * @param1 string $sql,要查詢的SQL語句 * @return mixed,成功返回一個數組,失敗返回FALSE */ public function db_getRow($sql){ //發送SQL $res = $this->db_query($sql); //判斷返回 return mysql_num_rows($res) ? mysql_fetch_assoc($res) : FALSE; } /* * 查詢:查詢多條記錄 * @param1 string $sql,要查詢的SQL語句 * @return mixed,成功返回一個二維數組,失敗返回FALSE */ public function db_getAll($sql){ //發送SQL $res = $this->db_query($sql); //判斷返回 if(mysql_num_rows($res)){ //迴圈遍曆 $list = array(); //遍曆 while($row = mysql_fetch_assoc($res)){ $list[] = $row; } //返回 return $list; } //返回FALSE return FALSE; } /* * mysql_query錯誤處理 * @param1 string $sql,需要執行的SQL語句 * @return mixed,只要語句不出錯,全部返回 */ private function db_query($sql){ //發送SQL $res = mysql_query($sql); //判斷結果 if(!$res){ //結果出錯了 //暴力處理,如果是真實線上項目(生產環境)必須寫入到記錄檔 echo '語句出現錯誤:
'; echo '錯誤編號' . mysql_errno() . '
'; echo '錯誤內容' . mysql_error() . '
'; exit; } //沒有錯誤 return $res; } //__sleep方法 public function __sleep(){ //返回需要儲存的屬性的數組 return array('host','port','user','pass','dbname','charset','prefix'); } //__wakeup方法 public function __wakeup(){ //串連資源 $this->connect(); //設定字元集和選中資料庫 $this->setCharset(); $this->setDbname(); } /* * 擷取完整的表名 */ protected function getTableName(){ //完整表名:首碼+表名 return $this->prefix . $this->table; } }//這個DB類,一般不寫析構(不釋放資源)

2.使用DB類,但是如果要使用某一個類來建立對象,必須要保證該類已經被載入到代碼區裡。可以使用一個魔術函數來實現對類的自動載入

自動載入:當一個指令檔在執行某些語句的時候(執行個體化)需要去代碼區裡尋找對應的類,如果找不到會通過自動載入函數來將對應的類檔案進行載入。

魔術函數:__autoload()

比如我們在index.php頁面中需要使用DB類,那麼我們就直接調用即可,具體代碼如下:

php    //使用DB類的對象來訪問資料庫    //先載入類檔案    //include_once 'DB.class.php';        //如果想使用其他類,又需要載入(所以使用魔術函數__autoload來實作類別的自動載入)    //顯示的寫出魔術函數__autoload    //參數:需要載入的類的名字    function __autoload($a){        //將對應的類檔案載入進來        if(is_file("$a.class.php")){            include_once "$a.class.php";        }    }    //執行個體化    $db = new DB(array('dbname' => 'mydatabase'));        

http://www.bkjia.com/PHPjc/1103327.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1103327.htmlTechArticle封裝自己的DB類(PHP),封裝db類php 封裝一個DB類,用來專門操作資料庫,以後凡是對資料庫的操作,都由DB類的對象來實現。這樣 有了自己...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.