PDO数据库操作类

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

   
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;
            }
        }
    }
}