温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-29 04:56:41 来源:网络 阅读:642 作者:流体石头 栏目:数据库

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

<?php interface I_DAO {         //查询所有数据的功能         public function getAll($sql=''); //    //查询一条数据         public function getRow($sql=''); //    //查询一个字段的值         public function getOne($sql=''); //    //执行增删改的功能         public function exec($sql=''); //    (查询的时候,返回的结果数)         public function resultRows(); //    //查询执行插入操作返回的主键的值         public function lastInsertId(); //    //         public function query($sql=''); //    //转义引号、并包裹的         public function escapeData($data=''); }

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

<?php class DAOPDO implements I_DAO {         private $host;     private $dbname;     private $user;     private $pass;     private $port;     private $charset;          //该属性保存pdo对象     private $pdo;          //查询语句返回的结果集数量     private $resultRows;          //私有属性保存该该实例     private static $instance;     //私有的构造方法     private function __construct($option=array())     {         //初始化服务器的配置         $this -> 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语句错误,具体信息如下:<br>".$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语句错误,具体信息如下:<br>".$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语句错误,具体信息如下:<br>".$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语句错误,具体信息如下:<br>".$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);     } }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI