PHP模型Model类封装数据库操作示例


Posted in PHP onMarch 14, 2019

本文实例讲述了PHP模型Model类封装数据库操作。分享给大家供大家参考,具体如下:

<?php
  //引入配置文件
  include "./config.php";
  class Model
  {
    public $link;//存储连接对象
    public $tableName = "";//存储表名
    public $field = "*";//存储字段
    public $allFields = [];//存储当前表所有字段
    public $where = "";//存储where条件
    public $order = "";//存储order条件
    public $limit = "";//存储limit条件
    /**
     * 构造方法 初始化
     * @param string $tableName 要操作的表名
     */
    public function __construct($tableName)
    {
      //1.存储操作的表名
      $this->tableName = PRE.$tableName;
      //2.初始化连接数据库
      $this->getConnect();
      //3.获得当前表的所有字段
      $this->getFields();
    }
    /**
     * 初始化连接数据库操作
     */
    public function getConnect()
    {
      //1.连接数据库
      $this->link = mysqli_connect(HOST,USER,PWD,DB,PORT);
      //2.判断连接
      if (mysqli_connect_errno($this->link)>0){
        echo mysqli_connect_error($this->link);
        exit;
      }
    }
    /**
     * 执行并发送SQL(查询)
     * @param string $sql 要查询的SQL语句
     * @return array 返回查询出来的二维数组
     */
    public function query($sql)
    {
      $result = mysqli_query($this->link,$sql);
      if ($result && mysqli_num_rows($result)>0) {
       $arr = [];
       while($row = mysqli_fetch_assoc($result)){
          $arr[] = $row;
       }
      }
    return $arr;
    }
    /**
     * 获取当前表的所有字段
     */
    public function getFields()
    {
      //查看表结构
      $sql = "desc {$this->tableName}";
      //执行并发送SQL
      $result = $this->query($sql);
      $fields = [];
      foreach ($result as $k => $v){
        $fields[] = $v['Field'];
      }
      $this->allFields = $fields;
    }
    /**
     * 执行并发送SQL语句(增删改)
     * @param string $sql 要执行的SQL语句
     * @return bool|int|string 添加成功则返回上一次操作id,删除修改操作则返回true,失败则返回false
     */
    public function exec($sql)
    {
      $result = mysqli_query($this->link,$sql);
      //处理结果集
      if ($result && mysqli_affected_rows($this->link)>0){
        //判断是否为添加操作,是则返回上一次执行的id
        if (mysqli_insert_id($this->link)){
          return mysqli_insert_id($this->link);
        }
        //删除修改操作成功则返回true
        return true;
      }else{
        //未执行成功则返回false
        return false;
      }
    }
    /**
     * 查询多条数据
     */
    public function select()
    {
      $sql = "select {$this->field} from {$this->tableName} {$this->where} {$this->order} {$this->limit}";
      //执行并发送SQL
      return $this->query($sql);
    }
    /**
     * 查询一条数据
     * @param string $id 要查询的id
     * @return array 返回一条数据
     */
    public function find($id="")
    {
      //判断id是否存在
      if (empty($id)){
        $where = $this->where;
      }else{
        $where = "where id={$id}";
      }
      $sql = "select {$this->field} from {$this->tableName} {$where} limit 1";
      //执行并发送sql
      $result = $this->query($sql);
      //返回一条数据
      return $result[0];
    }
    /**
     * 设置要查询的字段信息
     * @param string $field 要查询的字段
     * @return object 返回自己,保证连贯操作
     */
    public function field($field)
    {
      //判断字段是否存在
      if (empty($field)){
        return $this;
      }
      $this->field = $field;
      return $this;
    }
    /**
     * 统计总条数
     * @return int 返回总数
     */
    public function count()
    {
      //准备SQL语句
      $sql = "select count(*) as total from {$this->tableName} limit 1";
      $result = $this->query($sql);
      //返回总数
      return $result[0]['total'];
    }
    /**
     * 添加操作
     * @param array $data 要添加的数组
     * @return bool|int|string 添加成功则返回上一次操作的id,失败则返回false
     */
    public function add($data){
      //判断是否是数组
      if (!is_array($data)){
        return $this;
      }
      //判断是否全是非法字段
      if (empty($data)){
        die("非法数据");
      }
      //过滤非法字段
      foreach ($data as $k => $v){
        if (!in_array($k,$this->allFields)){
          unset($data[$k]);
        }
      }
      //将数组中的键取出
      $keys = array_keys($data);
      //将数组中取出的键转为字符串拼接
      $key = implode(",",$keys);
      //将数组中的值转化为字符串拼接
      $value = implode("','",$data);
      //准备SQL语句
      $sql = "insert into {$this->tableName} ({$key}) values('{$value}')";
      //执行并发送SQL
      return $this->exec($sql);
    }
    /**
     * 删除操作
     * @param string $id 要删除的id
     * @return bool 删除成功则返回true,失败则返回false
     */
    public function delete($id="")
    {
      //判断id是否存在
      if (empty($id)){
        $where = $this->where;
      }else{
        $where = "where id={$id}";
      }
      $sql = "delete from {$this->tableName} {$where}";
      echo $sql;
      //执行并发送
      return $this->exec($sql);
    }
    /**
     * 修改操作
     * @param array $data 要修改的数组
     * @return bool 修改成功返回true,失败返回false
     */
    public function update($data){
      //判断是否是数组
      if (!is_array($data)){
        return $this;
      }
      //判断是否是全是非法字段
      if(empty($data)){
        die("非法数据");
      }
      $str = "";
      //过滤非法字段
      foreach ($data as $k => $v){
        if ($k == "id"){
          $where = "where id={$v}";
          unset($data[$k]);
        }
        if (in_array($k,$this->allFields)){
          $str .= "{$k}='{$v}',";
        }else{
          unset($data[$k]);
        }
      }
      //判断是否有条件
      if (empty($this->where)){
        die("请输入条件");
      }
      //去掉最右侧的逗号
      $str = rtrim($str,",");
      $sql = "update {$this->tableName} set {$str} {$this->where}";
      return $this->exec($sql);
    }
    /**
     * where条件
     * @param string $where 输入的where条件
     * @return $this 返回自己,保证连贯操作
     */
    public function where($where)
    {
      $this->where = "where ".$where;
      return $this;
    }
    /**
     * order排序条件
     * @param string $order 以此为基准进行排序
     * @return $this 返回自己,保证连贯操作
     */
    public function order($order)
    {
      $this->order = "order by ".$order;
      return $this;
    }
    /**
     * limit条件
     * @param string $limit 输入的limit条件
     * @return $this 返回自己,保证连贯操作
     */
    public function limit($limit)
    {
      $this->limit = "limit ".$limit;
      return $this;
    }
    /**
     * 析构方法
     * 关闭数据库连接
     */
    public function __destruct()
    {
      mysqli_close($this->link);
    }
  }
 //自行调试
 $a = new Model("表名");
 // var_dump($a->find(3));
 // var_dump($a->select());
  // var_dump($a->count());
  // $res = $a->select();
  //var_dump($res);
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP数字格式化
Dec 06 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
php模板中出现空行解决方法
Mar 08 PHP
利用PHP实现短域名互转
Jul 05 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 #PHP
PHP7内核之Reference详解
Mar 14 #PHP
掌握PHP垃圾回收机制详解
Mar 13 #PHP
浅谈php的TS和NTS的区别
Mar 13 #PHP
浅谈PHP各环境下的伪静态配置
Mar 13 #PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 #PHP
Laravel事件监听器用法实例分析
Mar 12 #PHP
You might like
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
对python生成业务报表的实例详解
2019/02/03 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
周年庆典邀请函范文
2014/01/24 职场文书
环保倡议书300字
2014/05/15 职场文书
投资意向书
2014/07/30 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书