zoukankan      html  css  js  c++  java
  • 开发自己的框架——(二)数据库工具类的封装

    为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高。
    首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让数据库实现接口中的方法,数据库使用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 }
  • 相关阅读:
    ActiveJDBC 学习笔记
    selenium相关技术研究(从1.0-3.0)
    如何记录selenium自动化测试过程中接口的调用信息
    TestNG进行接口测试,脚本及可维护性框架
    贪多必失,精通一样再往下一样
    测试开发之路:英雄迟暮,我心未老
    接口测试面试题
    自动化测试中的滚动
    maven配置环境变量失败解决办法
    注释——创建新的类(文件)时,自动添加作者创建时间(文件注释)等信息的设置方法
  • 原文地址:https://www.cnblogs.com/loveyous/p/5832000.html
Copyright © 2011-2022 走看看