PHP最简单自定义自己的框架实现像TP链式sql语句(六)

1、实现效果,链式sql语句封装

order、where、group、limit等封装

PHP最简单自定义自己的框架实现像TP链式sql语句(六)_第1张图片

 PHP最简单自定义自己的框架实现像TP链式sql语句(六)_第2张图片

 2、数据表构造函数入参,ModelBase.php

    public $table = NULL;  
    public function __construct($table){
        $this->table=$table;
        if(!$this->table){
            die("no table" );
        }
        $this->_connect();
        $this->_opt();
    }

3、ModelBase.php定义order、where、group、limit等参数以及默认值

  public $opt;
  private function _opt(){
        $this->opt=array(
            'filed'=>'*',
            'where'=>'',
            'group'=>'',
            'having'=>'',
            'order'=>'',
            'limit'=>''
        );
    }
    public function where($where){
        $this->opt['where']=  ' WHERE '.$where;
        return $this;
    }
    public function order($order){
        $this->opt['order']=  ' ORDER BY '.$order;
        return $this;
    }
    public function group($group){
        $this->opt['group']=  ' GROUP BY '.$group;
        return $this;
    }
    public function having($having){
        $this->opt['having']=  ' having '.$having;
        return $this;
    }
    public function filed($filed){
        $this->opt['filed']= $filed;
        return $this;
    }
    public function limit($limit){
        $this->opt['limit']=  ' limit '.$limit;
        return $this;
    }

4、封装select、find、delete等方法动态参数ModelBase.php

  public function select()
    {
        $sql = "SELECT ".$this->opt['filed']. "FROM ".$this->table.$this->opt['where']
            .$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    public function find(){
        $data=$this->limit(1)->select();
        return current($data);
    }
    public function delete()
    {
        $sql = "DELETE FROM ".$this->table.$this->opt['where'];
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->rowCount();
    }
    public function insert( $data) {
        // 准备SQL语句
        $fields = implode(', ', array_keys($data));
        $values = ':' . implode(', :', array_keys($data));
        $sql = "INSERT INTO ". $this->table." (".$fields.") VALUES (".$values.")";
        // 绑定参数并执行SQL语句
        $stmt = $this->pdo->prepare($sql);
        foreach ($data as $key => $value) {
            $stmt->bindValue(':' . $key, $value);
        }
        return $stmt->execute();
    }


    public function update( $data)
    {
        if(empty($this->opt['where'])) die('更新语句必须有were条件');
        $up='';
        foreach ($data as $k=>$v){
            $up.="`".$k."`='".$v."'";
        }
        $sql="update  ".$this->table.' set '.$up.$this->opt['where'];
        $stmt = $this->pdo->prepare($sql);

        $stmt->execute();
        return $stmt->rowCount();
    }

5、indexCrl.php调用链式sql

where('id>0')->order('id desc')
            ->group('name')->having("AVG(age)>10")
            ->limit(1)->select();
        var_dump($data);

        //链式sql更新
        $up=[
            "name"=>"小李"
        ];
        $model->where('id=2')->update($up);
        //链式sql删除
        $model->where('id=2')->delete();
        //添加
        $insert=[
            "name"=>"张三",
            "age"=>13,
        ];
        $model->insert($insert);

    }
}

6、完整的ModelBase.php文件

table=$table;
        if(!$this->table){
            die("no table" );
        }
        $this->_connect();
        $this->_opt();
    }
    private function _connect(){

        if($this->pdo){
            return true;
        }
        $host = DB_HOST;
        $db = DB_DATABASE;
        $user = DB_USER;
        $pass = DB_PWD;

        $dsn = "mysql:host=$host;dbname=$db;charset=utf8";
        try {
            $this->pdo = new PDO($dsn, $user, $pass, [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
            ]);
        } catch (PDOException $e) {
            die("数据库连接失败: " . $e->getMessage());
        }
    }

    private function _opt(){
        $this->opt=array(
            'filed'=>'*',
            'where'=>'',
            'group'=>'',
            'having'=>'',
            'order'=>'',
            'limit'=>''
        );
    }
    public function where($where){
        $this->opt['where']=  ' WHERE '.$where;
        return $this;
    }
    public function order($order){
        $this->opt['order']=  ' ORDER BY '.$order;
        return $this;
    }
    public function group($group){
        $this->opt['group']=  ' GROUP BY '.$group;
        return $this;
    }
    public function having($having){
        $this->opt['having']=  ' having '.$having;
        return $this;
    }
    public function filed($filed){
        $this->opt['filed']= $filed;
        return $this;
    }
    public function limit($limit){
        $this->opt['limit']=  ' limit '.$limit;
        return $this;
    }
    public function select()
    {
        $sql = "SELECT ".$this->opt['filed']. "FROM ".$this->table.$this->opt['where']
            .$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    public function find(){
        $data=$this->limit(1)->select();
        return current($data);
    }
    public function delete()
    {
        $sql = "DELETE FROM ".$this->table.$this->opt['where'];
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->rowCount();
    }
    public function insert( $data) {
        // 准备SQL语句
        $fields = implode(', ', array_keys($data));
        $values = ':' . implode(', :', array_keys($data));
        $sql = "INSERT INTO ". $this->table." (".$fields.") VALUES (".$values.")";
        // 绑定参数并执行SQL语句
        $stmt = $this->pdo->prepare($sql);
        foreach ($data as $key => $value) {
            $stmt->bindValue(':' . $key, $value);
        }
        return $stmt->execute();
    }


    public function update( $data)
    {
        if(empty($this->opt['where'])) die('更新语句必须有were条件');
        $up='';
        foreach ($data as $k=>$v){
            $up.="`".$k."`='".$v."'";
        }
        $sql="update  ".$this->table.' set '.$up.$this->opt['where'];
        $stmt = $this->pdo->prepare($sql);

        $stmt->execute();
        return $stmt->rowCount();
    }

}

你可能感兴趣的:(自己框架,php,mysql,sql,数据库,php,开发语言)