千家信息网

开发自己的框架——(二)数据库工具类的封装

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高。首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数
千家信息网最后更新 2024年11月30日开发自己的框架——(二)数据库工具类的封装

为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高。
首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数据库实现接口中的方法,数据库使用PDO扩展访问数据。
数据库接口类
I_DAO.interface.php

数据库工具类中,对象只能通过静态方法创建一个实例(单例模式),不能通过克隆和继承创建对象,数据库的连接信息通过数组传递到方法中,工具类中有查询所有数据方法、查询一条数据方法、获得一个字段值的方法、实现增删改方法、
返回结果数量的方法等。
数据库操作工具类
DAOPDO.class.php

 initOptions($option);        //初始化PDO对象        $this -> initPDO();    }    //私有的克隆方法    private function __clone()    {            }    //公共的静态方法实例化单例对象    public static function getSingleton($options=array())    {        if(!self::$instance instanceof self){            //实例化            self::$instance = new self($options);        }        return self::$instance;    }    //初始化服务器的配置    private function initOptions($option)    {        $this -> host = isset($option['host'])?$option['host']:'';        $this -> dbname = isset($option['dbname'])?$option['dbname']:'';        $this -> user = isset($option['user'])?$option['user']:'';        $this -> pass = isset($option['pass'])?$option['pass']:'';        $this -> port = isset($option['port'])?$option['port']:'';        $this -> charset = isset($option['charset'])?$option['charset']:'';    }    //初始化PDO对象    private function initPDO()    {        $dsn =         "mysql:host=$this->host;dbname=$this->dbname;port=$this->port;charset=$this->charset";        $this -> pdo = new PDO($dsn,$this->user,$this->pass);    }    //封装pdostatement对象    public function query($sql="")    {            //返回pdo_statement对象        return $this->pdo -> query($sql);    }    //查询所有数据    public function getAll($sql='')    {        $pdo_statement = $this->query($sql);        $this->resultRows = $pdo_statement -> rowCount();        if($pdo_statement==false){            //输出SQL语句的错误信息            $error_info = $this->pdo-> errorInfo();            $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; echo $err_str; return false; } $result = $pdo_statement -> fetchAll(PDO::FETCH_ASSOC); return $result; } //查询一条记录 public function getRow($sql='') { $pdo_statement = $this->query($sql); if($pdo_statement==false){ //输出SQL语句的错误信息 $error_info = $this->pdo-> errorInfo(); $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; echo $err_str; return false; } $result = $pdo_statement -> fetch(PDO::FETCH_ASSOC); return $result; } //获得一个字段的值 public function getOne($sql='') { $pdo_statement = $this->query($sql); if($pdo_statement==false){ //输出SQL语句的错误信息 $error_info = $this->pdo-> errorInfo(); $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; echo $err_str; return false; } //返回查询的字段的值,我们在执行sql语句之前就应该明确查询的是哪个字段,这样fetchColumn就已经知道查询的字段值 $result = $pdo_statement -> fetchColumn(); return $result; } //实现非查询的方法 public function exec($sql='') { $result = $this->pdo -> exec($sql); //===为了区分 受影响的记录数是0的情况 if($result===false){ $error_info = $this->pdo-> errorInfo(); $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; echo $err_str; return false; } return $result; } //查询语句返回的结果数量 public function resultRows() { return $this->resultRows; } //返回上次执行插入语句返回的主键值 public function lastInsertId() { return $this->pdo->lastInsertId(); } //数据转义并引号包裹 public function escapeData($data='') { return $this->pdo->quote($data); }}


0