运用工厂模式封装增删改查,select查询条件

本文介绍了一个使用PHP封装的数据库操作类,包括连接数据库、增删改查等基本操作,并通过实例展示了如何使用这些封装好的方法进行数据库交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

config.php文件    数据库参数

<?php 

  $dsn=array(
   'localhost'=> '127.0.0.1',
   'username' => 'root',
    'password' => 'root',
    'charset'  => 'utf8',
    'dbname'   => "advanced",
    'type'   => 'Mysql',
   );
DB.class.php    工厂定义

<?php  
include 'MysqlDB.class.php';
/**
*  
*/
class  DBFactory{
   public static function create($dsn){
         $name=$dsn['type']."DB";
         return new $name($dsn);
   }
}
DB.interface.php    接口文件

<?php  

interface DB{
   //增加 arr为传入的数组
   public function insert($arr);
   //查询字段
   public function select($where);
  //条件查询
  public function where($where,$con);
  //添加and查询条件
  public function andwhere($where);
  //添加or查询条件
  public function orwhere($where);
  //分组查询
  public function groupBy($params);
  //having查询
  public function having($params);
  //增加筛选条件
  public function addhaving($params);
  //排序
  public function orderBy($params);
  //limit
  public function limit($offset,$start=0);
  //修改
   public function update($arr,$where='',$con='AND');
   //删除
   public function delete($del,$con='AND');
   //执行sql语句
   public function sqlquery($sql);
   //获取一条数据
   public function One();
   //获取所有数据
   public function All();
   //获取新增id
   public function getlastInsertId();
   //获取影响条数
   public function getRow();
  //获取结果集
  public function get();
}
MysqlDB.class.php    封装的方法

<?php
include 'DB.interface.php';
/**
* 
*/
class MysqlDB implements DB{
    //表名称
    public $table;
    //当前数据库对象
    public $db;
    //sql语句查询条件
    public $condition;
    //查询出的对象结果集
    public $obj;
    
   public function __construct(){
   }
    //按照配置连接数据库
   public function connect($dsn){
         $localhost=$dsn['localhost'];
        $username=$dsn['username'];
        $password=$dsn['password'];
        $dbname=$dsn['dbname'];
        $mysqli = new mysqli("$localhost","$username","$password","$dbname");
          if ($mysqli->connect_error) {
          die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
        }
       $charset=$dsn['charset'];
        $mysqli->query("set names $charset");
        $this->db=$mysqli;
       return $this;
   }
     //执行sql语句
    public function sqlquery($sql){
       $res=$this->db->query($sql);
       $arr=array();
       while ($row = mysqli_fetch_assoc($res)){
        $arr[]=$row;
       }
       return $arr;
    }
    //执行查询所有数组
    public function All(){
       $result=$this->obj;
       //var_dump($result);die;
       $arr=array();
       while ($row = mysqli_fetch_assoc($result)){
        $arr[]=$row;
       }
       return $arr;
    }
    //获取一条数据
     public function One(){
       $result=$this->obj;
       $row = mysqli_fetch_assoc($result);
       return $row;
    }
    //获取新增id
    public function getlastInsertId(){
        $id=$this->db->insert_id;
        return $id;
    }
    //获取影响行数
    public function getRow(){
       $num=$this->db->affected_rows;
       return $num;
    }
    //执行条件语句,存储结果集
    public function get(){
       $sql=$this->condition;
       //echo $sql;die;
       $res=$this->db->query($sql);
       $this->obj=$res;
       return $this;
    }
    //添加数据
     public function insert($arr){
      foreach ($arr as $k => $val) {
            $str.=','."'$val'";
      }
       $sql="insert into $this->table values(null$str)";
       $mysqli=$this->db;
       $mysqli->query($sql);
       $this->db=$mysqli;
       $id=$this->getlastInsertId();
       if ($id) {
         return $id;
       }else{
            return false;
       }
    }
    /*
    *删除数据
    */
     public function delete($del,$con='AND'){
        if (is_array($del)) {
            foreach ($del as $k => $val) {
                $str.=" $con".' '.$k."="."'$val'";
             }
               $str=substr($str,4);
          }else{
             $str=$del;
          } 
        $sql="delete from $this->table where $str";
        $mysqli=$this->db;
        $mysqli->query($sql);
        $this->db=$mysqli;
        $num=$this->getRow();
        if ($num) {
           return $num;
        }else{
              return false;
        }
    }
    //修改数据
    public function update($arr,$where='',$con='AND'){
        if (is_array($arr)) {
          foreach ($arr as $k => $val) {
               $update.=",".$k."="."'$val'";
           }
              $update=substr($update,1);
        }else{
            $update=$arr;
        }
       $str=$this->params($where,$con);
         $sql="update $this->table set $update where $str";
         $mysqli=$this->db;
       $mysqli->query($sql);
       $this->db=$mysqli;
       $num=$this->getRow();
       if ($num !== 'false') {
           return $num;
       }else{
              return false;
       }
    }
    //查询字段
     public function select($where='*'){
         $sql="select $where from $this->table";
        $this->condition=$sql;
        return $this;
     }
     //查询条件,拼接查询语句
    /*
    *array('name'=>"zhanmg");    ==  name =zhang
    *['in','id',1,10]            ==  id in (1,10)
    *['like','name','zhang']     ==  name like '%zhang%'
    *['between','id',1,10]       ==  id between 1 and 10
    *['>','id',1]                ==  id>1
    *['<','id',10]               ==  id<10
    */
    public function params($where,$con){
      if (!is_array($where)) {
        $str=$where;
      }else{
        $arr=array();
        foreach ($where as $key => $value) {
            if (is_int($key)) {
                 $arr[$key]=$value;
              }else{
                 $str.=" $con".' '.$key."="."'$value'";
              }   
        } 
        if (!empty($arr)) {
            $type=$arr[0];
            switch ($type) {
              case 'in':
                for ($i=2; $i <count($arr) ; $i++) { 
                  $ids.=','.$arr[$i];
                }
                $ids=substr($ids,1);
                $str= $arr[1].' '."in ($ids)";
                break;
              case 'like':
                $str= $arr[1].' '."like '%".$arr[2]."%'";
                break;
              case '>':
                $str= $arr[1].' '."> ".$arr[2];
                break;
              case '<':
                $str= $arr[1].' '."< ".$arr[2];
                break;
              case 'between':
                $str= $arr[1].' '."between ".$arr[2].' and '.$arr[3];
                break;
             }
        }else{
            if ($con=='AND') {
              $str=substr($str,4);
            }else{
              $str=substr($str,3);
            }
        }
      }
      return $str;
    }
    //构建条件语句
     public function where($where,$con='AND'){
      $str=$this->params($where,$con);
      $sql=$this->condition;
      $sql.=" where $str";
      $this->condition=$sql;
      //echo $sql;die;
      return $this;
    }
    //添加and查询条件
    public function andwhere($where){
      $str=$this->params($where,$con);
      $sql=$this->condition;
      $sql.=" AND $str";
      $this->condition=$sql;
      //echo $sql;die;
      return $this;
    }
    //添加or查询条件
    public function orwhere($where){
      $str=$this->params($where,$con);
      $sql=$this->condition;
      $sql.=" OR $str";
      $this->condition=$sql;
      return $this;
    }
   //查询条数限制
   public function limit($offset,$start=0){
      $sql=$this->condition;
      $sql.=" limit $start,$offset";
      $this->condition=$sql;
      return $this;
   }
    //分组查询
    public function groupBy($params){
      $sql=$this->condition;
      $sql.=" GROUP BY $params";
      $this->condition=$sql;
      return $this;
    }
    //筛选
    public function having($params,$con='AND'){
      $str=$this->params($params,$con);
      $sql=$this->condition;
      $sql.=" having ($str)";
      $this->condition=$sql;
      return $this;
    }
    //增加筛选条件
    public function addhaving($params,$con='AND'){
      $str=$this->params($params,$con);
      $sql=$this->condition;
      $sql.=" AND ($str)";
      $this->condition=$sql;
      return $this;
    }
    //排序
    public function orderBy($params){
      $sql=$this->condition;
      $sql.=" ORDER BY $params";
      $this->condition=$sql;
      return $this;
    }
   
     

}


test.php  调用

<?php  
   include 'config.php';
   include 'DB.class.php';
   
$mysql=DBFactory::create($dsn);
$mysql->table='admin';
$db=$mysql->connect($dsn);
//$a=$mysql->db;
   /*query()*/
//$sql="select * from admin";
//$res=$mysql->connect($dsn)->sqlquery($sql);
   /*insert*/
// $arr=array(
//     'username'=>'zhangsan',
//     'pwd'=>'123456',
//     );
// $res=$db->insert($arr);
   /**delete*/
 // $delwhere=array(
 //   'id'=>14,
 // );
 // $delwhere="id in(12,13,15)";
 // $res=$db->delete($delwhere); 
    /**update*/
  $arr=array(
   'username'=>'zhangsan',
   'pwd'=>'123456',
   );
   $where=array(
   'id'=>11,
  ); 
 
 //   $arr=['in','id',1,3,4,10] ; 
 //   $arr1=['like','username','ang'];   
 //   //$arr=['between','id',1,10];      
 //   //$arr=['>','id',1];                
 //   //$arr=['<','id',10]   
 $res=$db->update($arr,$where);
 //   $res=$db->select()->where($arr)->having($arr1)->orderBy("id desc")->limit(5)->get()->All();
var_dump($res);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值