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

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

 1 php
 2 interface I_DAO
 3 {
 4         //查询所有数据的功能
 5         public function getAll($sql='');
 6 //    //查询一条数据
 7         public function getRow($sql='');
 8 //    //查询一个字段的值
 9         public function getOne($sql='');
10 //    //执行增删改的功能
11         public function exec($sql='');
12 //    (查询的时候,返回的结果数)
13         public function resultRows();
14 //    //查询执行插入操作返回的主键的值
15         public function lastInsertId();
16 //    //
17         public function query($sql='');
18 //    //转义引号、并包裹的
19         public function escapeData($data='');
20 }

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

  1 php
  2 
  3 class DAOPDO implements I_DAO
  4 {    
  5     private $host;
  6     private $dbname;
  7     private $user;
  8     private $pass;
  9     private $port;
 10     private $charset;
 11     
 12     //该属性保存pdo对象
 13     private $pdo;
 14     
 15     //查询语句返回的结果集数量
 16     private $resultRows;
 17     
 18     //私有属性保存该该实例
 19     private static $instance;
 20     //私有的构造方法
 21     private function __construct($option=array())
 22     {
 23         //初始化服务器的配置
 24         $this -> initOptions($option);
 25         //初始化PDO对象
 26         $this -> initPDO();
 27     }
 28     //私有的克隆方法
 29     private function __clone()
 30     {
 31         
 32     }
 33     //公共的静态方法实例化单例对象
 34     public static function getSingleton($options=array())
 35     {
 36         if(!self::$instance instanceof self){
 37             //实例化
 38             self::$instance = new self($options);
 39         }
 40         return self::$instance;
 41     }
 42     //初始化服务器的配置
 43     private function initOptions($option)
 44     {
 45         $this -> host = isset($option['host'])?$option['host']:'';
 46         $this -> dbname = isset($option['dbname'])?$option['dbname']:'';
 47         $this -> user = isset($option['user'])?$option['user']:'';
 48         $this -> pass = isset($option['pass'])?$option['pass']:'';
 49         $this -> port = isset($option['port'])?$option['port']:'';
 50         $this -> charset = isset($option['charset'])?$option['charset']:'';
 51     }
 52     //初始化PDO对象
 53     private function initPDO()
 54     {
 55         $dsn = 
 56         "mysql:host=$this->host;dbname=$this->dbname;port=$this->port;charset=$this->charset";
 57         $this -> pdo = new PDO($dsn,$this->user,$this->pass);
 58     }
 59     //封装pdostatement对象
 60     public function query($sql="")
 61     {    
 62         //返回pdo_statement对象
 63         return $this->pdo -> query($sql);
 64     }
 65     //查询所有数据
 66     public function getAll($sql='')
 67     {
 68         $pdo_statement = $this->query($sql);
 69         $this->resultRows = $pdo_statement -> rowCount();
 70         if($pdo_statement==false){
 71             //输出SQL语句的错误信息
 72             $error_info = $this->pdo-> errorInfo();
 73             $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; 74 echo $err_str; 75 return false; 76 } 77 $result = $pdo_statement -> fetchAll(PDO::FETCH_ASSOC); 78 return $result; 79 } 80 //查询一条记录 81 public function getRow($sql='') 82 { 83 $pdo_statement = $this->query($sql); 84 if($pdo_statement==false){ 85 //输出SQL语句的错误信息 86 $error_info = $this->pdo-> errorInfo(); 87 $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; 88 echo $err_str; 89 return false; 90 } 91 $result = $pdo_statement -> fetch(PDO::FETCH_ASSOC); 92 return $result; 93 } 94 //获得一个字段的值 95 public function getOne($sql='') 96 { 97 $pdo_statement = $this->query($sql); 98 if($pdo_statement==false){ 99 //输出SQL语句的错误信息 100 $error_info = $this->pdo-> errorInfo(); 101 $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; 102 echo $err_str; 103 return false; 104 } 105 //返回查询的字段的值,我们在执行sql语句之前就应该明确查询的是哪个字段,这样fetchColumn就已经知道查询的字段值 106 $result = $pdo_statement -> fetchColumn(); 107 return $result; 108 } 109 //实现非查询的方法 110 public function exec($sql='') 111 { 112 $result = $this->pdo -> exec($sql); 113 //===为了区分 受影响的记录数是0的情况 114 if($result===false){ 115 $error_info = $this->pdo-> errorInfo(); 116 $err_str = "SQL语句错误,具体信息如下:
".$error_info[2]; 117 echo $err_str; 118 return false; 119 } 120 return $result; 121 } 122 //查询语句返回的结果数量 123 public function resultRows() 124 { 125 return $this->resultRows; 126 } 127 //返回上次执行插入语句返回的主键值 128 public function lastInsertId() 129 { 130 return $this->pdo->lastInsertId(); 131 } 132 //数据转义并引号包裹 133 public function escapeData($data='') 134 { 135 return $this->pdo->quote($data); 136 } 137 }

 

转载于:https://www.cnblogs.com/loveyous/p/5832000.html

你可能感兴趣的:(开发自己的框架——(二)数据库工具类的封装)