博客列表 >php使用PDO封装数据库操作类库

php使用PDO封装数据库操作类库

失去过去的博客
失去过去的博客原创
2018年05月06日 00:53:184029浏览

1、PDO类库操作封装

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/5/5 0005
 * Time: 22:23
 * 类中的静态成员:静态成员和静态方法
 * 作用域 :静态成员是属于类所有的,必须使用类进行调用,不能使用类对象的方法来调用
 * 静态成员在类中使用self::来调用类中的静态成员  在外部使用类名::来调用
 * 类成员的静态化是面向对象编程的一种趋势  有很多模拟手段
 *类中成员的静态化使用关键字:static来实现
 * 静态技术的使用场景还有静态延迟绑定技术
 *在静态方法中不能调用非静态属性 原因是php在执行过程中会先加载静态成员 而$this 并未执行所以报错
 *static 是根据上下文的调用者来决定;
 */

class Db
{
    private  $type;
    private $host;
    private $dbname;
    private $user;
    private $password;
    private $port;
    private $dsn;
    protected $options;
    public $pdo;
    public  function  __construct($type,$host,$dbname,$user,$password,$port=3306)
    {
        $this->dbname=$dbname;
        $this->user=$user;
        $this->password=$password;
        $this->port=$port;
        $this->type=$type;
        $this->host=$host;
        $this->dsn = "$this->type:host=$this->host;dbname=$this->dbname";
       $this->options =[
           PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,//设置错误模式
           PDO::ATTR_CASE=>PDO::CASE_NATURAL,//设置数据库字段保持不变
           PDO::ATTR_EMULATE_PREPARES=>TRUE,//启用pdo模拟功能
           PDO::ATTR_PERSISTENT=>TRUE//启用持久性连接
       ];
        try{
            //实例化pdo对象
            $this->pdo = new PDO($this->dsn,$this->user,$this->password,$this->options);
//            		echo '连接成功';
        }catch(PDOException $e){
            //抛出异常
            die('ERROR:'.$e->getMessage());
        }

        return $this->pdo;

    }

    //插入数据
    public static function insert($pdo, $table, $data=[]){
        //	创建sql预处理语句
        $sql = "INSERT IGNORE {$table} SET ";
        foreach(array_keys($data) as $fileld){
            $sql .= $fileld.'=:'.$fileld.', ';
        }
        //去除sql语句的左右空格 并去除右边的逗号
        $sql = rtrim(trim($sql),',').';';

        //创建pdo预处理对象
        $stmt = $pdo->prepare($sql);
        //绑定参数到预处理对象
        foreach($data as $fileld => $value){
            $stmt->bindValue(":{$fileld}",$value);
        }
        //执行新增操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                return true;
            }
        }else{
            return false;
        }
    }
    //更新数据
        public static function update($pdo, $table, $data=[], $where=''){
//        创建sql语句
        $sql = "UPDATE {$table} SET ";
        foreach (array_keys($data) as $field) {
            $sql .= $field.'=:'. $field.', ';

        }
        //去掉尾部的逗号并添加分号
        $sql = rtrim(trim($sql),', ');
        //
//        添加更新条件
        if (!empty($where)) {
            $sql .= ' WHERE '.$where.';';
        } else {
            exit('条件不能为空');
        }

//        创建stmt对象
        $stmt = $pdo->prepare($sql);
        //绑定参数到预处理对象中
        foreach ($data as $field => $value) {
            $stmt->bindValue(":{$field}", $value);
        }

        //执行更新操作
        if ($stmt->execute()) {
            if ($stmt->rowCount()>0) {
                return true;
            }
        } else {
            return false;
        }
    }
    //查询单条数据
    public static function find($pdo,$table,$fields,$where){
//    c创建sql语句
        $sql = 'SELECT ';
        if(is_array($fields)){
            foreach($fields as $field){
                $sql .= $field.', ';
            }
        }else{
            $sql .=$fields;
        }
        $sql = rtrim(trim($sql),', ');
        $sql .= ' FROM '.$table;
        //添加查询条件
        if(!empty($where)){
            $sql .= " WHERE ".$where;
        }
        $sql .= ' LIMIT 1';
        $sql = rtrim(trim($sql),', ').';';

        //创建stmt对象
        $stmt = $pdo->prepare($sql);
        //执行查询操作
        if ($stmt->execute()){
            if ($stmt->rowCount()>0){
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                return $stmt->fetch();
            }

        }else{
            return $stmt->error;
        }


}
//查询多条数据
    public static function select($pdo, $table, $fields, $where='', $order=''){
//            创建sql语句
        $sql = 'SELECT ';
        if (is_array($fields)){
            foreach($fields as $field){
                $sql .= $fiele.', ';
            }

        }else{
            $sql .=$fields;
        }
        $sql = rtrim(trim($sql),',');
        $sql .=' FROM '.$table;
        //添加查询条件
        if(!empty($where)) {
            $sql .= '  WHERE '. $where;
        }
        //添加排序条件
        if (!empty($order)){
            $sql .=' ORDER BY '.$order;
        }
        //去掉尾部的逗号并添加逗号
        $sql = rtrim(trim($sql),' , ').';';
        //创建pdo预处理对象
        $stmt= $pdo->prepare($sql);
        //执行操作
        if ($stmt->execute()){
            if($stmt->rowCount()>0){
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                return $stmt->fetchAll();
            }
        }else{
            return false;
        }

}
//删除数据
    public static function delete($pdo,$table, $where='') {
        //创建SQL语句
        $sql = "DELETE FROM {$table} ";
        //添加删除条件
        if(!empty($where)) {
            $sql .= 'WHERE '. $where;
        }else{
            exit('条件不能为空');
        }
        //去掉尾部逗号,并添加分号结束
        $sql = rtrim(trim($sql),', ').';';

        //创建PDO预处理对象
        $stmt = $pdo->prepare($sql);

        //执行删除操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                return true;
            }
        } else {
            return false;
        }

}
    public function close()
    {
        //关闭PDO链接
        return $this->pdo = null;
    
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

2、测试demo

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/5/5 0005
 * Time: 22:23
 */
include 'class/Db.php';
$connect = new Db('mysql','127.0.0.1','php','root','root',3306);
Db::insert($connect->pdo,'user',['user_name'=>'lin','email'=>'dphp@qq.com','password'=>sha1(123456)]);

//更多方法请自行测试

//ECHO phpinfo();

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议