PDO數據庫操作類

dy223 9年前發布 | 1K 次閱讀 PHP


class HRDB{ protected $pdo; protected $res; protected $config;

/*構造函數*/
function __construct($config){
    $this->Config = $config;
    $this->connect();
}

/*數據庫連接*/
public function connect(){
    $this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password']);
    $this->pdo->query('set names utf8;');
    //把結果序列化成stdClass
    //$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    //自己寫代碼捕獲Exception
    $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

/*數據庫關閉*/
public function close(){
    $this->pdo = null;
}

public function query($sql){
    $res = $this->pdo->query($sql);
    if($res){
        $this->res = $res;
    }
}
public function exec($sql){
    $res = $this->pdo->exec($sql);
    if($res){
        $this->res = $res;
    }
}
public function fetchAll(){
    return $this->res->fetchAll();
}
public function fetch(){
    return $this->res->fetch();
}
public function fetchColumn(){
    return $this->res->fetchColumn();
}
public function lastInsertId(){
    return $this->res->lastInsertId();
}

/**
 * 參數說明
 * int              $debug      是否開啟調試,開啟則輸出sql語句
 *                              0   不開啟
 *                              1   開啟
 *                              2   開啟并終止程序
 * int              $mode       返回類型
 *                              0   返回多條記錄
 *                              1   返回單條記錄
 *                              2   返回行數
 * string/array     $table      數據庫表,兩種傳值模式
 *                              普通模式:
 *                              'tb_member, tb_money'
 *                              數組模式:
 *                              array('tb_member', 'tb_money')
 * string/array     $fields     需要查詢的數據庫字段,允許為空,默認為查找全部,兩種傳值模式
 *                              普通模式:
 *                              'username, password'
 *                              數組模式:
 *                              array('username', 'password')
 * string/array     $sqlwhere   查詢條件,允許為空,兩種傳值模式
 *                              普通模式:
 *                              'and type = 1 and username like "%os%"'
 *                              數組模式:
 *                              array('type = 1', 'username like "%os%"')
 * string           $orderby    排序,默認為id倒序
 */
public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="tbid desc"){
    //參數處理
    if(is_array($table)){
        $table = implode(', ', $table);
    }
    if(is_array($fields)){
        $fields = implode(', ', $fields);
    }
    if(is_array($sqlwhere)){
        $sqlwhere = ' and '.implode(' and ', $sqlwhere);
    }
    //數據庫操作
    if($debug === 0){
        if($mode === 2){
            $this->query("select count(tbid) from $table where 1=1 $sqlwhere");
            $return = $this->fetchColumn();
        }else if($mode === 1){
            $this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
            $return = $this->fetch();
        }else{
            $this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
            $return = $this->fetchAll();
        }
        return $return;
    }else{
        if($mode === 2){
            echo "select count(tbid) from $table where 1=1 $sqlwhere";
        }else if($mode === 1){
            echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
        }
        else{
            echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
        }
        if($debug === 2){
            exit;
        }
    }
}

/**
 * 參數說明
 * int              $debug      是否開啟調試,開啟則輸出sql語句
 *                              0   不開啟
 *                              1   開啟
 *                              2   開啟并終止程序
 * int              $mode       返回類型
 *                              0   無返回信息
 *                              1   返回執行條目數
 *                              2   返回最后一次插入記錄的id
 * string/array     $table      數據庫表,兩種傳值模式
 *                              普通模式:
 *                              'tb_member, tb_money'
 *                              數組模式:
 *                              array('tb_member', 'tb_money')
 * string/array     $set        需要插入的字段及內容,兩種傳值模式
 *                              普通模式:
 *                              'username = "test", type = 1, dt = now()'
 *                              數組模式:
 *                              array('username = "test"', 'type = 1', 'dt = now()')
 */
public function insert($debug, $mode, $table, $set){
    //參數處理
    if(is_array($table)){
        $table = implode(', ', $table);
    }
    if(is_array($set)){
        $set = implode(', ', $set);
    }
    //數據庫操作
    if($debug === 0){
        if($mode === 2){
            $this->query("insert into $table set $set");
            $return = $this->lastInsertId();
        }else if($mode === 1){
            $this->exec("insert into $table set $set");
            $return = $this->res;
        }else{
            $this->query("insert into $table set $set");
            $return = NULL;
        }
        return $return;
    }else{
        echo "insert into $table set $set";
        if($debug === 2){
            exit;
        }
    }
}

/**
 * 參數說明
 * int              $debug      是否開啟調試,開啟則輸出sql語句
 *                              0   不開啟
 *                              1   開啟
 *                              2   開啟并終止程序
 * int              $mode       返回類型
 *                              0   無返回信息
 *                              1   返回執行條目數
 * string           $table      數據庫表,兩種傳值模式
 *                              普通模式:
 *                              'tb_member, tb_money'
 *                              數組模式:
 *                              array('tb_member', 'tb_money')
 * string/array     $set        需要更新的字段及內容,兩種傳值模式
 *                              普通模式:
 *                              'username = "test", type = 1, dt = now()'
 *                              數組模式:
 *                              array('username = "test"', 'type = 1', 'dt = now()')
 * string/array     $sqlwhere   修改條件,允許為空,兩種傳值模式
 *                              普通模式:
 *                              'and type = 1 and username like "%os%"'
 *                              數組模式:
 *                              array('type = 1', 'username like "%os%"')
 */
public function update($debug, $mode, $table, $set, $sqlwhere=""){
    //參數處理
    if(is_array($table)){
        $table = implode(', ', $table);
    }
    if(is_array($set)){
        $set = implode(', ', $set);
    }
    if(is_array($sqlwhere)){
        $sqlwhere = ' and '.implode(' and ', $sqlwhere);
    }
    //數據庫操作
    if($debug === 0){
        if($mode === 1){
            $this->exec("update $table set $set where 1=1 $sqlwhere");
            $return = $this->res;
        }else{
            $this->query("update $table set $set where 1=1 $sqlwhere");
            $return = NULL;
        }
        return $return;
    }else{
        echo "update $table set $set where 1=1 $sqlwhere";
        if($debug === 2){
            exit;
        }
    }
}

/**
 * 參數說明
 * int              $debug      是否開啟調試,開啟則輸出sql語句
 *                              0   不開啟
 *                              1   開啟
 *                              2   開啟并終止程序
 * int              $mode       返回類型
 *                              0   無返回信息
 *                              1   返回執行條目數
 * string           $table      數據庫表
 * string/array     $sqlwhere   刪除條件,允許為空,兩種傳值模式
 *                              普通模式:
 *                              'and type = 1 and username like "%os%"'
 *                              數組模式:
 *                              array('type = 1', 'username like "%os%"')
 */
public function delete($debug, $mode, $table, $sqlwhere=""){
    //參數處理
    if(is_array($sqlwhere)){
        $sqlwhere = ' and '.implode(' and ', $sqlwhere);
    }
    //數據庫操作
    if($debug === 0){
        if($mode === 1){
            $this->exec("delete from $table where 1=1 $sqlwhere");
            $return = $this->res;
        }else{
            $this->query("delete from $table where 1=1 $sqlwhere");
            $return = NULL;
        }
        return $return;
    }else{
        echo "delete from $table where 1=1 $sqlwhere";
        if($debug === 2){
            exit;
        }
    }
}

}</pre>

 本文由用戶 dy223 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!