1. 程式人生 > >PHP 資料庫類的封裝及使用

PHP 資料庫類的封裝及使用


 

封裝:

<?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'] : 'czyyzb';
        $this->dbname = isset($arr['dbname']) ? $arr['dbname'] : 'mydb';
        $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 '資料庫連線錯誤:<br/>';
            echo '錯誤編號' . mysql_errno() . '<br/>';
            echo '錯誤內容' . mysql_error() . '<br/>';
            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 '語句出現錯誤:<br/>';
            echo '錯誤編號' . mysql_errno() . '<br/>';
            echo '錯誤內容' . mysql_error() . '<br/>';
            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;
    }
}    
 ?>
使用

 
<? php
header("Content-type: text/html; charset=utf-8");
include("conn.php");
//例項化
$con = new DB(array('dbname' => 'oilmis_wh'));
$sql = "SELECT * FROM stock ";
$arr = $con ->db_getAll($sql);
?>
//這個DB類,一般不寫析構(不釋放資源)