PHP PDO类

<?php
//数据库连接类,不建议直接使用DB,而是对DB封装一层
//这个类不会被污染,不会被直接调用
class DB {
    //pdo对象
    private $_pdo = null;
    //用于存放实例化的对象
    static private $_instance = null;  

    //公共静态方法获取实例化的对象
    static protected function getInstance() {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }  

    //私有克隆
    private function __clone() {}  

    //私有构造
    private function __construct() {
        try {
            $this->_pdo = new PDO(DB_DNS, DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND=>‘SET NAMES ‘.DB_CHARSET));
            $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }  

    //新增
    protected function add($_tables, Array $_addData) {
        $_addFields = array();
        $_addValues = array();
        foreach ($_addData as $_key=>$_value) {
            $_addFields[] = $_key;
            $_addValues[] = $_value;
        }
        $_addFields = implode(‘,‘, $_addFields);
        $_addValues = implode("‘,‘", $_addValues);
        $_sql = "INSERT INTO $_tables[0] ($_addFields) VALUES (‘$_addValues‘)";
        return $this->execute($_sql)->rowCount();
    }  

    //修改
    protected function update($_tables, Array $_param, Array $_updateData) {
        $_where = $_setData = ‘‘;
        foreach ($_param as $_key=>$_value) {
            $_where .= $_value.‘ AND ‘;
        }
        $_where = ‘WHERE ‘.substr($_where, 0, -4);
        foreach ($_updateData as $_key=>$_value) {
            if (Validate::isArray($_value)) {
                $_setData .= "$_key=$_value[0],";
            } else {
                $_setData .= "$_key=‘$_value‘,";
            }
        }
        $_setData = substr($_setData, 0, -1);
        $_sql = "UPDATE $_tables[0] SET $_setData $_where";
        return $this->execute($_sql)->rowCount();
    }  

    //验证一条数据
    protected function isOne($_tables, Array $_param) {
        $_where = ‘‘;
        foreach ($_param as $_key=>$_value) {
            $_where .=$_value.‘ AND ‘;
        }
        $_where = ‘WHERE ‘.substr($_where, 0, -4);
        $_sql = "SELECT id FROM $_tables[0] $_where LIMIT 1";
        return $this->execute($_sql)->rowCount();
    }  

    //删除
    protected function delete($_tables, Array $_param) {
        $_where = ‘‘;
        foreach ($_param as $_key=>$_value) {
            $_where .= $_value.‘ AND ‘;
        }
        $_where = ‘WHERE ‘.substr($_where, 0, -4);
        $_sql = "DELETE FROM $_tables[0] $_where LIMIT 1";
        return $this->execute($_sql)->rowCount();
    }  

    //查询
    protected function select($_tables, Array $_fileld, Array $_param = array()) {
        $_limit = $_order = $_where = $_like = ‘‘;
        if (Validate::isArray($_param) && !Validate::isNullArray($_param)) {
            $_limit = isset($_param[‘limit‘]) ? ‘LIMIT ‘.$_param[‘limit‘] : ‘‘;
            $_order = isset($_param[‘order‘]) ? ‘ORDER BY ‘.$_param[‘order‘] : ‘‘;
            if (isset($_param[‘where‘])) {
                foreach ($_param[‘where‘] as $_key=>$_value) {
                    $_where .= $_value.‘ AND ‘;
                }
                $_where = ‘WHERE ‘.substr($_where, 0, -4);
            }
            if (isset($_param[‘like‘])) {
                foreach ($_param[‘like‘] as $_key=>$_value) {
                    $_like = "WHERE $_key LIKE ‘%$_value%‘";
                }
            }
        }
        $_selectFields = implode(‘,‘, $_fileld);
        $_table = isset($_tables[1]) ? $_tables[0].‘,‘.$_tables[1] : $_tables[0];
        $_sql = "SELECT $_selectFields FROM $_table $_where $_like $_order $_limit";
        $_stmt = $this->execute($_sql);
        $_result = array();
        while (!!$_objs = $_stmt->fetchObject()) {
            $_result[] = $_objs;
        }
        return Tool::setHtmlString($_result);
    }  

    //总记录
    protected function total($_tables, Array $_param = array()) {
        $_where = ‘‘;
        if (isset($_param[‘where‘])) {
            foreach ($_param[‘where‘] as $_key=>$_value) {
                $_where .= $_value.‘ AND ‘;
            }
            $_where = ‘WHERE ‘.substr($_where, 0, -4);
        }
        $_sql = "SELECT COUNT(*) as count FROM $_tables[0] $_where";
        $_stmt = $this->execute($_sql);
        return $_stmt->fetchObject()->count;
    }  

    //得到下一个ID
    protected function nextId($_tables) {
        $_sql = "SHOW TABLE STATUS LIKE ‘$_tables[0]‘";
        $_stmt = $this->execute($_sql);
        return $_stmt->fetchObject()->Auto_increment;
    }  

    //执行SQL
    private function execute($_sql) {
        try {
            $_stmt = $this->_pdo->prepare($_sql);
            $_stmt->execute();
        } catch (PDOException  $e) {
            exit(‘SQL语句:‘.$_sql.‘<br />错误信息:‘.$e->getMessage());
        }
        return $_stmt;
    }
}
?>  

原文地址:https://www.cnblogs.com/wenhainan/p/8711384.html

时间: 2024-10-06 00:29:34

PHP PDO类的相关文章

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

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

封装好的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 $

PDO类基本应用二

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

PDO类的封装

<?php class MyPDO{ /** 访问数据库的PDO对象 */ protected $pdo; /** * 当前类的构造函数 * 读取数据库配置信息文件,并初始化PDO对象 */ function __construct() { if (file_exists('db.ini')) { $arr = @parse_ini_file('db.ini'); } else { exit('没有找到对应的数据库配置文件信息 ...'); } $dsn = "{$arr['dbms']}

PDO类PDO、PDOStatement、PDOException

PDO中包含三个预定义的类,它们分别是PDO.PDOStatement.PDOException PDO: PDO->setAttribute(); 全局属性设置,包括:列名格式和错误提示类型 PDO->query($sql); 常用于执行有返回的sql查找语句,但执行之前要手动转义,返回PDOStatement对象 PDO->exec($sql); 执行没有返回的sql语句,同样要手动转义,有插入.修改.删除操作.返回影响的行数 PDO->lastInsertId(); 返回最后

PHP的PDO类认识

POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题.PDO的目标 提供一种轻型.清晰.方便的 API统一各种不同 RDBMS 库的共有特性,但不排除更高级的特性.通过 PHP 脚本提供可选的较大程度的抽象/兼容性. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训.因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性.能力.PDO 旨在将常见

PHP中的符号 -&gt;、=&gt; 和 :: 以及PDO类的封装

下文链接:http://www.95px.com/program/95px_program_3118.shtml 没关系,下面我们做一下详细的解释,如果你有C++,Perl基础,你会发现这些家伙和他们里面的一些符号功能是差不多的. '- >'符号是"插入式解引用操作符"(infix dereference operator) 换句话说,它是调用由引用传递参数的子程序的方法(当然,还有其它的作用).正如我们上面所提到的,在调用PHP的函数的时候,大部分参数都是通过引用传递的.PHP

学习到目前,自己封装的db类和pdo类

DB封装类 <?php class DBDA { public $host = "localhost"; public $uid = "root"; public $pwd = "root"; public $dbname = "mydb"; public function Query($sql,$type=1) //连接数据库,参数默认为1的时候为查询结果,其它的为增删改. { $db = new MySQLi($th

我的PDO 类

<?php /* public function db_insert($sql) #插入数据 public function db_delete($sql) #删除数据 public function db_update($sql) #更新数据 public function db_getOne($sql) #获取一条数据 public function db_getAll($sql) #获取多条数据 public function db_tran_start() #开启事务 public fu