开发自己的框架——数据库工具类的封装
Posted 小码农薛尧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发自己的框架——数据库工具类的封装相关的知识,希望对你有一定的参考价值。
为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高。
首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数据库实现接口中的方法,数据库使用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语句错误,具体信息如下:<br>".$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语句错误,具体信息如下:<br>".$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语句错误,具体信息如下:<br>".$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语句错误,具体信息如下:<br>".$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 }
以上是关于开发自己的框架——数据库工具类的封装的主要内容,如果未能解决你的问题,请参考以下文章