zoukankan      html  css  js  c++  java
  • 一个数据库类

    由于尚未知道使用哪种数据库这里应该编写一个数据库抽象类

    abstract class db {
        /*
        parms $h服务器地址
        parms $u 用户名
        */
        public abstract function connect($h,$u,$p,$dbname);
        /*返回bool/resource*/
        public abstract function query($sql);
        /*单行数据*/
        public abstract function getRow($sql);
        /*单挑数据*/
        public abstract function getOne($sql);
        
        public abstract function autoExecute($table,$data,$act="insert",$where="");
    
    }
    /*一个基本的数据库应该包含主连接的数据库的主机名 账号 密码 数据库 编码字
    符 以及用一个私有静态变量作为保存数据库连接结果 还有一个用于保存数据库基本配置
    */ class Mysql extends db{ private $host; private $user; private $pwd; private $dbname; private $charset;private static $conf = null; //保存服务器链接资源 private $conn = null; }

    接下来在后边我们逐渐扩展该数据库类

    protected function __construct(){
            /*首先获取数据库基本配置内容*/
            $conf = self::$conf = config::getIns();
            //使用配置文件中的配置
            $this->host = $conf->host;
            $this->user = $conf->user;
            $this->pwd = $conf->pwd;
            $this->dbname = $conf->dbname;
            $this->charset = $conf->charset;
            //连接数据库
            $this->connect($this->host,$this->user,$this->pwd);
            //切换数据库 因为数据库在程序执行过程中可能还需要切换所以这里应该编写一个方法用
    于切换数据库而不是写死在这里
    $this->switchdb($this->dbname); //设置字符集 同上 $this->setChar($this->charset); }
    //连接数据
    public function connect($h,$u,$p){
        //调用mysqli链接方法
        $this->conn = new mysqli($h,$u,$p);
        //var_dump($this->conn);
    }



    //后边使用Mysql::getInt方法获取 数据库连接资源 这里先判断是否已经连接数据库 实例化数据库 $conn= Mysql::getInt()
        public static function getInt(){
            if(self::$conn === false){
                self::$conn = new self();
            }
            return self::$conn;
        }


    //
    负责切换数据库 网站大时需要 public function switchdb($dbname){ $this->conn->select_db($dbname); }
    //设置字符集
    public function setChar($char){
        //注意有个空格
       $this->conn->set_charset($char);
    }
    //负责发送sql查询
    public function query($sql){
        $c = $this->conn;
        $rst = $c->query($sql);
        if(!$rst){
            //这里利用到日志累的日志记录功能
            log::write(date("Y-m-d H:i:d",time()).$c->error);
        }
        //返回执行结果
        return $rst;
    }
    //负责获取多行查询结果
    public function getAll($sql){
        //用一个数组保存执行结果
        $list = array();
        $rst = $this->query($sql);
        if(!$rst){
            return false;
        }
        while($row = $rst->fetch_assoc()){
            $list[] = $row;
        }
        return $list;
    }
    //获得一行数据
    public function getRow($sql){
        $rst = $this->query($sql);
        if(!$rst){
            return false;
        }
        return $rst->fetch_assoc();
    }
    //得到单个值
    public function getOne($sql){
        //exit;
        $rst = $this->query($sql);
        if(!$rst){
            return false;
        }
        //返回行值
        return $rst->fetch_assoc();
    }
    public function autoExecute($table , $data , $act="insert" , $where = ""){
            //执行插入功能
            if($act == 'insert'){
                //$table这里添加一个$符号在一个双引号当中会经过解析
                $sql = "insert into $table (";
                //将数组当中的数据以,隔离开 implode 讲数组转换成以','隔开的字符串 array_keys获取数组的键值
                $sql .= implode(',' , array_keys($data)) . ") values ('";
                $sql .= implode("','" , array_values($data)) ."')";
                //返回执行结果集
                 $rst = $this->query($sql);
                if(!$rst){
                    log::write(date("Y-m-d H:i:d",time()).$this->error);
                }
                return $rst;
            }else if($act == 'update'){
                $sql = "update $table set ";
                foreach ($data as $k => $v) {
                    $sql .= $k . "='" . $v . "',";
                }
                $sql = rtrim($sql , ',') . " where " . $where;
                $rst = $this->query($sql);
                //如果执行失败将数据库返回来的错误信息记录到日志文件当中
                if(!$rst){
                    log::write(date("Y-m-d H:i:d",time()).$this->error);
                }
                return $rst;
            }
        }
    //返回受影响行数
        public function affected_rows(){
            return $this->conn->affected_rows;
        }
    //返回受影响行数
        public function affected_rows(){
            return $this->conn->affected_rows;
        }
        //返回最新的auto_increment自增列的长度
        public function insert_id(){
            return $this->conn->insert_id;
        }
        public function close(){
            $this->conn->close();
        }
  • 相关阅读:
    yii1.0 yii2.0 ar
    php 函数
    整除理论,1.1数的整除性定理总结
    设M=5^2003+7^2004+9^2005+11^2006,求证8|M。(整除理论,1.1.8)
    已知整数m,n,p,q适合(m-p)|(mn+pq)证明:(m-p)|(mq+np)(整除理论1.1.5)
    证明:一个整数a若不能被6整除,则a2+24必能被24整除。(整除理论,1.1.4)
    ural 1073.Square Country(动态规划)
    10个男孩和n个女孩共买了n2+8n+2本书,已知他们每人买的书本的数量是相同的,且女孩人数多于南海人数,问女孩人数是多少?(整除原理1.1.3)
    设正整数n的十进制表示为n=ak……a1a0(0<=ai<=9,0<=i<=k,ak!=0),n的个位为起始数字的数字的正负交错之和T(n)=a0+a1+……+(-1)kak,证明:11|n的充分必要条件是11|T(n);(整除理论1.1.2))
    设n是奇数,证明:16|(n4+4n2+11)(整除原理1.1.1)
  • 原文地址:https://www.cnblogs.com/webcyh/p/11312168.html
Copyright © 2011-2022 走看看