2018-06-23 17:56:08  325508 4

一个简单使用的数据库操作类(仅供学习参考使用)

 标签:   


基于PDO写的一个数据库操作类,仅有增删该查功能,其他功能自己添加,基于单例实现的。



<?php

class Db{
    
    //存储 类的实例化对象
    private  static $instance;
    
    //存储pdo类的实例化
    private  $pdo;
    
    //存储PDOStament
    private $stmt;
    
    //禁止外部 new 类
    private function __construct($config,$port,$charset){
        try{
            $this->pdo = new  PDO('mysql:host='.$config['host'].';dbname='.$config['dbname'].'
            ;port='.$port.';charset='.$charset,$config['user'],$config['password']);
            //$this->pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

        }catch(PDOException $e){
            header("Content-type: text/html;charset=utf-8"); 
            echo 'mysql connect error:'.$e->getMessage();
        }
        

    }
    
    //对外访问的方法  实现 类的实例
    
    public static function getInstance($config,$port=3306,$charset="utf8"){
        
        //判断是否有实例化 没有实例化
        if(!self::$instance instanceof Db ){
            self::$instance = new self($config,$port,$charset);
        }
        
        //有 直接返回实例化
        return self::$instance;
        
    }
    
    //插入数据
    public function insertData($table,$data){
        
        //拼接插入的字段名
        $columns = implode(',',array_keys($data));
        //拼接占位符
        $values = ':'.implode(',:',array_keys($data));
        
        $sql = "INSERT INTO $table ($columns) VALUES($values)";
        
        //处理插入的数据
        $newData = $this->doData($data);
        
        $this->exe($sql,$newData );
        
        
        if($this->stmt->errorCode()==00000){
            return $this->pdo->lastInsertId();
        }else{
            return $this->stmt->errorInfo()[2];
        }
        
    }
    
    //更新数据
    
    public function updateData($table,$data,$where){
        //$sql = "UPDATE user SET user_name=:name WHERE id=:id";
        
        //加个判断 判断$where是否在数据表存在 
        
        

        $res = $this->getOne($table,array_keys($data),$where);
        

        if(!$res){
            return '不存在你要更新的数据';
        }
        
        $columns = '';
        foreach($data as $k=>$v){
            $columns.=$k.'=:'.$k.',';
        }
        $columns = trim($columns,',');
        
        $sql = "UPDATE $table SET $columns ".$where;
        


        //处理插入的数据
        $newData = $this->doData($data);
        
        
        $this->exe($sql,$newData);
        
        if($this->stmt->errorCode()==00000){
            return 1;
        }else{
            return $this->stmt->errorInfo()[2];
        }
        
        
    }
    
    
    //查询一条数据
    
    public function getOne($table,$fields,$where){
        //$sql = "SELECT user_name,password FROM user WHERE id=1 /limit 1";
        
        if(count($fields)>1){
            $columns = implode(',',array_values($fields));
        }else{
            $columns = $fields[0];
        }

        $sql = "SELECT $columns FROM $table ".$where;
        
        
        $this->exe($sql);
        
          
        if($this->stmt->errorCode()==00000){
            return $this->stmt->fetch(PDO::FETCH_ASSOC) ;
        }else{
            return $this->stmt->errorInfo()[2];
        }
    }
    
    //查询多条数据
    
    public function getAll($table,$fields,$where){
        
        if(count($fields)>1){
            $columns = implode(',',array_values($fields));
        }else{
            $columns = $fields[0];
        }
        
        $sql = "SELECT $columns FROM $table ".$where;
        
        $this->exe($sql);
          
        if($this->stmt->errorCode()==00000){
            return $this->stmt->fetchAll(PDO::FETCH_ASSOC) ;
        }else{
            return $this->stmt->errorInfo()[2];
        }
        
    }
    
    //删除数据
    
    public function deleteData($table,$where){
        
        $sql = "DELETE FROM $table ".$where;
        
        
        $res = $this->getOne($table,['*'],$where);
        
        if(!$res){
            return '不存在你要删除的数据';
        }
        
        $this->exe($sql);
          
        if($this->stmt->errorCode()==00000){
            return 1;
        }else{
            return $this->stmt->errorInfo()[2];
        }
        
        
    }
    
    
    //处理插入的数据
    
    private function doData($data){
        //处理插入的数据
        foreach($data as $k=>$v){
            $key = ':'.$k;
            $newData[$key]=$v;
        }
        return $newData;
    }
    
    //执行sql语句

    private function exe($sql,$data=null){
        

        $this->stmt = $this->pdo->prepare($sql);
        $this->stmt->execute($data);
    }
    
    //禁止外部 克隆对象
    private function __clone(){}
    
}

//$db = new  PDO('mysql:host=127.0.0.1;dbname=lampol;port=3306;charset=utf8','root','123456');

$config=['host'=>'127.0.0.1','dbname'=>'lampol','user'=>'root','password'=>'123456'];
$db = Db::getInstance($config);

$table = 'user';
$data = ['user_name'=>'asdfasdfasdasdf','password'=>'asdfasd','fee'=>12];
//echo $db->insertData($table,$data);

//echo $db->updateData($table,$data,' where id=7');
$fields = ['user_name','password'];
//var_dump($db->getOne($table,$fields,'WHERE id=2'));

var_dump($db->getAll($table,$fields,'limit 2'));

//echo  $db->deleteData($table,'WHERE id=1');

//$sql = "SELECT user_name,password FROM user WHERE id=1 /limit 1";

//$sql = "INSERT INTO user (user_name,password) VALUES(:name,:password)";



//$sql = "UPDATE user SET user_name=:name WHERE id=:id";

//$stmt = $db->prepare($sql);

//$data = [':name'=>$user_name,':password'=>$password];

//$res = $stmt->execute($data);


4 条留言此文章没有人评论

给我留言

评论内容