pdo操作数据库

<?php
// 封装一个DB类.用于实现对数据库的增删改查
class Db{
    // 属性私有化
    private $host;    // 数据库主机地址
    private $port;    // 数据库端口
    private $dbname;  // 数据库名
    private $charset; // 字符集
    private $dsn;     // dsn
    private $pdo;     // 数据库pdo对象
    private $table;   // 数据库pdo对象
    private static $obj = null;// 静态变量防止初始化
    // 构造方法私有化,防止类外new
    private function __construct($config=[]){
//      $this->dsn ='mysql:host=localhost;port=3306;dbname=shop;charset=utf8';
        $this->initParam($config);// 初始化参数
        $this->initPdo($config);  // 连接pdo
        $this->table = $config['table'];

    }
    // 初始化参数
    private function initParam($config=[]){
        $this->host = $config['host']??"localhost";
        $this->port = $config['port']??"3306";
        $this->dbname = $config['dbname']??"bad";
        $this->charset = $config['charset']??"utf8";
        $this->dsn = "mysql:host={$this->host};port={$this->port};dbname={$this->dbname};charset={$this->charset}";
    }
    // 初始化pdo连接
    private function initPdo($config=[]){
        // 连接数据库
        $this->user = $config['user']??"root";
        $this->pass = $config['pass']??"root";
        try{
            $this->pdo = new PDO($this->dsn,$this->user,$this->pass);
            $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); // 设置模式
        }catch (PDOException $e){
            die($e->getMessage());
        }

    }
    // 创建对象
    public static function getInstance($config=[]){
        if(self::$obj == null){
            self::$obj = new self($config);
        }
        return self::$obj;
    }
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    // 1.添加
    public function add($data){
        $keys  = array_keys($data);
        $field = "";
        $vals = "";
        foreach ($keys as $v){
            $field .=$v.",";
            $vals .= "?,";
        }
        $field = rtrim($field,",");
        $vals = rtrim($vals,",");
        $sql = "insert into {$this->table} (".$field.") values($vals)";
        // 准备预处理
        $stmt = $this->pdo->prepare($sql);
        // 绑定参数
        $n = 1;
        foreach ($data as $v){
            $stmt->bindValue($n,$v);
            $n++;
        }
        // 执行
        return $stmt->execute();
    }

    //删除
    public function del($w)
    {
        $sql = "delete from {$this->table} where ";
        $str = "";
        foreach ($w as $k=>$v){
            $str .="$k = ? and ";
        }
        $str = rtrim($str," and ");
        $sql = $sql . $str;
        $stmt = $this->pdo->prepare($sql);
        // 绑定参数
        $n = 1;
        foreach ($w as $v){
            $stmt->bindValue($n,"$v");
            $n++;
        }
        // 执行
        return $stmt->execute();
    }

    //修改
    public function update($w1,$w2)
    {
        $str1 = '';
        foreach ($w1 as $k1 => $v1){
            $str1 .="$k1 = ? , ";
        }
        $str1 = rtrim($str1,' , ');
        $str2 = '';
        foreach ($w2 as $k2 => $v2){
            $str2 = "$k2 = ? , ";
        }
        $str2 = rtrim($str2,' , ');
        $sql = "update {$this->table} set {$str1} where {$str2}";
        // 准备预处理
        $stmt = $this->pdo->prepare($sql);
        // 绑定参数
        $n = 1;
        foreach ($w1 as $v1){
            $stmt->bindValue($n,$v1);
            $n++;
        }
        foreach ($w2 as $v2){
            $stmt->bindValue($n,$v2);
            $n++;
        }
        //执行
        $stmt->execute();
        return $stmt->rowCount();
    }

    // 根据id来查询
    public function getOneById($id){
        $sql = "select * from {$this->table} where id = ?";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindValue(1,$id);
        $stmt->execute();
        return $stmt->fetch();
    }
    // 根据条件来查询
    public function getOne($where){
        $sql = "select * from {$this->table} where ";
        $str = "";
        foreach ($where as $k=>$v){
            $str .="$k = ? and ";
        }
        $str = rtrim($str," and ");
        $sql = $sql . $str;
        // 准备预处理
        $stmt = $this->pdo->prepare($sql);
        // 绑定参数
        $n = 1;
        foreach ($where as $v){
            $stmt->bindValue($n,$v);
            $n++;
        }
        // 执行
        $stmt->execute();
        return $stmt->fetch();
    }

    // 搜索
    public function search($where){
        $sql = "select * from {$this->table} where ";
        $str = "";
        foreach ($where as $k=>$v){
            $str .="$k like ? and ";
        }
        $str = rtrim($str," and ");
        $sql = $sql . $str;
        $stmt = $this->pdo->prepare($sql);
        // 绑定参数
        $n = 1;
        foreach ($where as $v){
            $stmt->bindValue($n,"%$v%");
            $n++;
        }
        // 执行
        $stmt->execute();
        return $stmt->fetchAll();
    }

    //查询多条
    public function getAll($w){
        $sql = "select * from {$this->table} where ";
        $str = "";
        foreach ($w as $k=>$v){
            $str .="$k = ? and ";
        }
        $str = rtrim($str," and ");
        $sql = $sql . $str;
        $stmt = $this->pdo->prepare($sql);
        // 绑定参数
        $n = 1;
        foreach ($w as $v){
            $stmt->bindValue($n,"$v");
            $n++;
        }
        // 执行
        $stmt->execute();
        return $stmt->fetchAll();
    }
}
//$db = Db::getInstance(["table"=>"book"]);
//$w1 = ['title'=>'333','content'=>'444'];
//$w2 = ['aid' => '5'];
//$row = $db->update($w1,$w2);
//var_dump($row);

  

posted @ 2022-01-05 21:43  是梦别喊疼想赢别喊停  阅读(45)  评论(0)    收藏  举报