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 相关文章推荐
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
php集成动态口令认证
Jul 21 PHP
详解php中的implements 使用
Jun 13 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 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
再说下636单管机
2021/03/02 无线电
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
深入理解PHP中的global
2014/08/19 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
小学门卫岗位职责
2013/12/17 职场文书
大学生毕业鉴定
2014/01/31 职场文书
公司股东出资证明书
2014/11/01 职场文书
2014年工程部工作总结
2014/11/25 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
任命书怎么写
2015/03/02 职场文书
诚信考试主题班会
2015/08/17 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python