封装好的PDO类

封装PDO类,方便使用:

<?php
header(‘content-type:text/html;charset=utf-8‘);
/**
 * 封装PDODB类
 */
// 加载接口
// include ‘./I_DB.interface.php‘;
class PDODB{
    /**
     * 定义相关属性
     */
    private $host;   //主机地址
    private $port;     //端口号
    private $user;     //用户名
    private $pass;     //密码
    private $dbname; //数据库名
    private $charset;//字符集
    private $dsn;      //数据源名称
    private $pdo;    //用于存放PDO的一个对象
    // 静态私有属性用于保存单例对象
    private static $instance;    

    /**
     * [__construct 构造方法]
     * @param [array] $config [配置数组]
     */
    private function __construct($config) {
        // 初始化属性
        $this->initParams($config);
        // 初始化dsn
        $this->initDSN();
        // 实例化PDO对象
        $this->initPDO();
        // 初始化PDO对象的属性
        $this->initAttribute();
    }

    /**
     * [getInstance 获取PDO单例对象的公开方法]
     * @param  [array] $config [description]
     * @return [PDOobject] self::$instance [pdo对象]
     */
    public static function getInstance($config) {
        if (!self::$instance instanceof self) {
            self::$instance = new self($config);
        }
        return self::$instance;
    }

    /**
     * [initParams 初始化属性]
     * @param  [array] $config [配置数组]
     */
    private function initParams($config) {
        $this->host = isset($config[‘host‘])?$config[‘host‘]:‘localhost‘;
        $this->port = isset($config[‘port‘])?$config[‘port‘]:‘3306‘;
        $this->user = isset($config[‘user‘])?$config[‘user‘]:‘root‘;
        $this->pass = isset($config[‘pass‘])?$config[‘pass‘]:‘‘;
        $this->dbname = isset($config[‘dbname‘])?$config[‘dbname‘]:‘‘;
        $this->charset = isset($config[‘charset‘])?$config[‘charset‘]:‘utf8‘;
    }
    /**
     * [initDSN 初始化dsn]
     */
    private function initDSN() {
        $this->dsn = "mysql:host=$this->host;port=$this->port;dbname=$this->dbname;charset=$this->charset";
    }

    /**
     * [initPDO 实例化PDO对象]
     * @return [boolean] [false|none]
     */
    private function initPDO() {
        // 在实例化PDO对象的时候自动的走异常模式(也是唯一走异常模式的地方)
        try{
            $this->pdo = new PDO($this->dsn,$this->user,$this->pass);
        }catch(PDOException $e) {
            $this->my_error($e,$sql);
        }
    }

    /**
     * [initAttribute 初始化PDO对象属性]
     * @return [boolean] [false|none]
     */
    private function initAttribute() {
        // 修改错误模式为异常模式
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }

    /**
     * [my_error 输出异常信息]
     * @param  [PDOException] $e [异常对象]
     * @return [boolean]    [false|none]
     */
    private function my_error($e,$sql) {
        echo "执行sql语句失败!<br/>";
        echo "错误语句为:",$sql,"<br/>";
        echo "错误的代码是:",$e->getCode(),"<br/>";
        echo "错误的信息是:",$e->getMessage(),"<br/>";
        echo "错误的脚本是:",$e->getFile(),"<br/>";
        echo "错误的行号是:",$e->getLine(),‘<br/>‘;
        return false;
    }

    /**
     * [my_query 执行一条sql语句,实现增删改]
     * @param  [string] $sql [sql语句]
     * @return [array] $result [资源结果集]
     */
    public function my_query($sql) {
        // 其实就是调用pdo对象中的exec方法
        try{
            $result = $this->pdo->exec($sql);
        }catch(PDOException $e) {
            $this->my_error($e,$sql);
        }
        return $result;
    }    

    /**
     * [fetchAll 查询所有]
     * @param  [string] $sql [sql语句]
     * @return [arry] $result [资源结果集]
     */
    public function fetchAll($sql) {
        // 其实就是调用PDOStatment对象里面的fetchAll方法
        try{
            $stmt = $this->pdo->query($sql);
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
            // 关闭游标,释放结果集
            $stmt->closeCursor();
        }catch(PDOException $e) {
            $this->my_error($e,$sql);
        }
        return $result;
    }

    /**
     * [fetchRow 查询一条]
     * @param  [string] $sql [sql语句]
     * @return [arry] $result [资源结果集]
     */
    public function fetchRow($sql) {
        // 其实就是调用PDOStatment对象里面的fetch方法
        try{
            $stmt = $this->pdo->query($sql);
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            // 关闭游标,释放结果集
            $stmt->closeCursor();
        }catch(PDOException $e) {
            $this->my_error($e,$sql);
        }
        return $result;
    }

    /**
     * [fetchColumn 查询单行单列]
     * @param  [string] $sql [sql语句]
     * @return [arry] $result [资源结果集]
     */
    public function fetchColumn($sql) {
        // 其实就是调用PDOStatment对象里面的fetchColumn方法
        try{
            $stmt = $this->pdo->query($sql);
            $result = $stmt->fetchColumn();
            // 关闭游标,释放结果集
            $stmt->closeCursor();
        }catch(PDOException $e) {
            $this->my_error($e,$sql);
        }
        return $result;
    }
    /**
     * [my_prepare sql预处理]
     * @param  [string] $sql [有占位符的sql语句]
     * @param  [array] $arr [对象数组]
     */
      public function my_prepare($sql,$arr) {
          try{
              $stmt = $this->pdo->prepare($sql);
              $result = $stmt->execute($arr);
          }catch(PDOException $e){
              $this->my_error($e,$sql);
          }
      }
      /**
       * [my_rowCount 查询结果中的总行数]
       * @param  [string] $sql [有占位符的sql语句]
       * @return [string] $count [查询结果的总行数]
       */
      public function my_rowCount($sql) {
          try{
              $stmt = $this->pdo->query($sql);
              $count = $stmt->rowCount();
          }catch(PDOException $e) {
              $this->my_error($e,$sql);
          }
          return $count;
      }

      /**
       * [my_rowCount 获取查询结果中的总列数(总字段数)]
       * @param  [string] $sql [有占位符的sql语句]
       * @return [string] $count [获取查询结果中的总列数(总字段数)]
       */
      public function my_columnCount($sql) {
          try{
              $stmt = $this->pdo->query($sql);
              $count = $stmt->columnCount();
          }catch(PDOException $e) {
              $this->my_error($e,$sql);
          }
          return $count;
      }
      /**
       * [fetchObject 查询一个对象]
       * @param  [string] $sql [查询一行的sql语句]
       * @return [object] $object [目标对象]
       */
      public function fetchObject($sql) {
          try{
              $stmt = $this->pdo->query($sql);
              //$stmt->fetch(PDO::FETCH_BOJ);
              $object = $stmt->fetchObject();
          }catch(PDOException $e) {
              $this->my_error($e,$sql);
          }
          return $object;
      }

    /**
     * [__clone 私有化克隆方法,保护单例模式]
     */
    private function __clone() {}

    /**
     * [__set 为一个不可访问的属性赋值的时候自动触发]
     * @param [string] $name  [属性名]
     * @param [mixed] $value [属性值]
     */
     public function __set($name,$value) {
         $allow_set = array(‘host‘,‘port‘,‘user‘,‘pass‘,‘dbname‘,‘charset‘);
         if(in_array($name,$allow_set)) {
             //当前属性可以被赋值
             $this->$name = $value;
         }
     }

    /**
     * [__get *获得一个不可访问的属性的值的时候自动触发]
     * @param  [string] $name [属性名]
     * @return [string] $name的value [该属性名的值]
     */
     public function __get($name) {
         $allow_get = array(‘host‘,‘port‘,‘user‘,‘pass‘,‘dbname‘,‘charset‘);
         if (in_array($name,$allow_get)) {
             return $this->$name;
         }
     }

    /**
     * [__call 访问一个不可访问的对象方法的时候触发]
     * @param  [string] $name     [属性名]
     * @param  [array] $argument [参数列表]
     */
     public function __call($name, $argument) {
         echo "对不起,您访问的".$name."()方法不存在!<br/>";
     }

    /**
     * [__callstatic 访问一个不可访问的类方法(静态方法)的时候触发]
     * @param  [string] $name     [属性名]
     * @param  [array] $argument [参数列表]
     */
     public static function __callStatic($name, $argument) {
         echo "对不起,您访问的".$name."()静态方法不存在!<br/>";
     }
}
时间: 2024-11-01 20:43:15

封装好的PDO类的相关文章

yaf框架封装简单的pdo类

<?php/** Created by PhpStorm. User: Administrator Date: 2017/7/24 Time: 14:03*//* 数据库PDO操作 */class pdo {private function Link(){$config=Yaf_Application::app()->getConfig();try{$PDO=new PDO($config['mysql']['dsn'],$config['mysql']['user'],$config['my

20150113--PDO增删改查+封装PDO类

回顾 方法重写:是因为对象的访问会先去子类的类空间找,从而形成了对父类的覆盖. 继承链:类只能单继承,但是可以通过继承链来实现多继承 特殊类:final类和抽象类 接口:interface PHP重载:当访问一个权限不够或者不存在的属性或者方法的时候,会自动触发的魔术方法. 属性重载和方法重载 对象的保存和还原:serialize和unserialize(对应的类已经在内存:如果有资源属性必须进行重新加载资源),魔术方法(__sleep和__wakeup) 对象遍历:默认只能遍历public属性

PDO类基本应用二

思考:在MySql中,有一种事务功能,能够帮助实现哪些需要多个步骤操作,然后一次性完成的,那么PDO中是如何实现的呢? 引入:其实,事务操作本质上是一种SQL操作,也就是说利用前面所说的写操作(事务都是写操作),就可以实现,而在PDO中,当然也提供 了一定的封装来实现这个功能,从而避免了一些简单的固定SQL执行的操作 PDO事务功能[了解] 定义:PDO事务功能,并非PDO额外多出了一项功能,而是将原来MySql所支持的事务操作进行了一定的封装实现.注意:事务执行是否成功是由MySql对应的存储

第33天:封装自己的class类

封装自己的class类,实现浏览器兼容. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>封装自己的class类</title> 6 <style> 7 div{ 8 width: 200px; 9 height: 200px; 10 background: pink; 1

利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口: 1.public Connection getConnection()   获得数据库的连接 2.public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException  更新数据库

简单封装 Delphi 的 DirectX类

[delphi] view plain copy var CreatorRenderer  : TCreatorRenderer; Form1: TForm1; 窗体代码: [delphi] view plain copy {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // 创建 CreatorRenderer := TCreatorRenderer.Create(); CreatorRenderer.CreateD

【Android】19.3 ContentProvider及安卓进一步封装后的相关类

分类:C#.Android.VS2015: 创建日期:2016-03-08 一.简介 ContentProvider:内容提供程序. Android的ContentProvider与.NET框架的EF(Entity Framework)非常类似.在EF中,每个类表示数据库中的一个表,类中的每个属性对应表的字段,类的每个实例表示数据库表的一行记录.同样,在Android中,每个ContentProvider类的实例表示数据表的一行记录,ContentProvider实例集合中的每一项表示数据表中的

Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类

?? Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了Android如何基于OnItemTouchListener +GestureDetector实现单击.长按事件的监听,由于如今RecyclerView在Android开发是如此的普遍,以及RecyclerView的单击事件是如此的常用,如果像附录文章2那样把一堆事件监听写到业务逻辑代码里面,那得写

block传值以及利用block封装一个网络请求类

1.block在俩个UIViewController间传值 最近刚学了几招block 的高级用法,其实就是利用block语法在俩个UIViewController之间传值,在这里分享给初学者,同时也方便我自己理解.我们知道UINavigationController类管理UIViewController的时候,利用的是"栈"的思想,在这里不做过多解释,切入正题,假设我们现在有俩个UIViewController,viewC1和viewC2,viewC1比viewC2先进入到UINavi