zoukankan      html  css  js  c++  java
  • pdo封装2

    <?php
    //添加了一个 _createSql 方法,负责创建所有sql
    class Db{
        static private $ins;
        private $pdo;
        private $table;
        private $where;
        private $field = '*';
        private $joinWhere = 'where';
        private $order;
        private $limit;
    
    
        final private function __construct(){
            //从配置文件读入数据库信息
            $dsn  =  'mysql:dbname=wxguide;host=127.0.0.1' ;
            $user  =  'root';
            $password  =  '';
    
            try {
                 $this->pdo  = new  PDO ( $dsn ,  $user ,  $password );
            } catch ( PDOException $e ) {
                die('Connection failed: '  .  $e -> getMessage ());
            }
        }
    
        final private function __clone(){}
    
        static public function table($table){
            if(!self::$ins instanceof self){
                self::$ins = new self();
            }
            self::$ins->table = $table;
            return self::$ins;
        }
    
        public function query($sql){
            return $this->pdo->query($sql);
        }
    
        public function exec($sql){
            return $this->pdo->exec($sql);
        }
    
        public function insert($data){
            $type = 'insert';
            $sql = $this->_createSql($type,$data);
            return $this->exec($sql);
        }
    
        public function delete(){
            $type = 'delete';
            $sql = $this->_createSql($type);
            return $this->exec($sql);
        }
    
        public function update($data){
            $type = 'update';
            $sql = $this->_createSql($type,$data);
            return $this->exec($sql);
        }
    
        public function find(){
            $type = 'select';
            $sql = $this->_createSql($type);
            return $this->query($sql)->fetch(PDO::FETCH_ASSOC);
        }
    
        public function select(){
            $type = 'select';
            $sql = $this->_createSql($type);
            return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC);
            
        }
    
        //条件字符串的【条件的值】需要用 引号(值如果是数字可以不用,但是用也没影响,建议不用),如: $str = 'id = 1 and name = "王五" '
        public function where($str){
            $this->where = $str;
            return $this;
        }
    
        public function field($str){
            $this->field = $str;
            return $this;
        }
    
        public function limit($numstr){
            $this->limit = 'limit ' . $numstr;
            return $this;
        }
    
        public function order($str){
            $this->order = 'order by ' . $str;
            return $this;
        }
    
        public function group(){
            
        }
    
        public function having(){
            
        }
    
        //给表取别名
        public function alias($str){
            $this->table .= ' ' . $str;
            return $this;
        }
    
        //可以多表联查,join('tb1 b,tb2 c','a,id=b.id and a.id = c.id')
        //$join 可以取值 INNER,left或者right,默认值是 INNER
        public function join($alias,$where = null,$join = 'INNER'){
            $this->where .= $where;
            if($join != 'INNER'){
                $this->table .= ' '.$join . ' join ' . $alias;
                $this->joinWhere = 'ON';
            }else{
                $this->table .= ',' . $alias;
            }
            return $this;
        }
    
        //创建sql
        private function _createSql($type,$data=null){
            switch ($type) {
                case 'insert':
                    $arr = $this->_cf($data);
                    $sql = 'insert into ' . $this->table . ' (' . $arr['kstr'] . ') VALUES (' . $arr['vstr'] . ')';
                    break;
    
                case 'delete':
                    $sql = 'delete from ' . $this->table . ' '.$this->joinWhere.' ' . $this->where;
                    break;
                
                case 'update':
                    $arr = $this->_cf($data);
                    $sql = 'update ' . $this->table . ' set '. $arr['ustr'] .' '.$this->joinWhere.' ' . $this->where;
                    break;
    
                case 'select':
                    $sql = 'select '. $this->field .' from ' . $this->table;
                    if($this->where){
                        $sql = $sql . ' '.$this->joinWhere.' ' . $this->where;
                    }
                    $sql .= ' '.$this->order;
                    $sql .= ' '. $this->limit;
                    break;
    
                default:
                    die('sql创建出现错误');
                    break;
            }
            $this->_clear();
            return $sql;
        }
    
        //属性数据还原
        private function _clear(){
            $this->table = '';
            $this->where = '';
            $this->field = '*';
            $this->joinWhere = 'where';
            $this->order = '';
            $this->limit = '';
        }
    
        //拆分 数组,组装数据
        private function _cf($data){
            $arr = [];
            $str = '';
            foreach($data as $k=>$v){
                $arr['k'][] = $k;
                $arr['v'][] = '"'.$v.'"';
                $str .= $k . '="' . $v . '",';
            }
            $arr['kstr'] = implode(',',$arr['k']);
            $arr['vstr'] = implode(',',$arr['v']);
            $arr['ustr'] = rtrim($str, ",");
            return $arr;
        }
    }
    
    header('Content-type:text/html;charset=gbk');
    
    $a = Db::table('model')->where('1')->select();
    print_r($a);
  • 相关阅读:
    取得窗口大小和窗口位置兼容所有浏览器的js代码
    一个简单易用的导出Excel类
    如何快速启动chrome插件
    网页表单设计案例
    Ubuntu下的打包解包
    The source file is different from when the module was built. Would you like the debugger to use it anyway?
    FFisher分布
    kalman filter
    Group delay Matlab simulate
    24位位图格式解析
  • 原文地址:https://www.cnblogs.com/lglblogadd/p/8434557.html
Copyright © 2011-2022 走看看