• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP封装的数据库模型Model类完整示例【基于PDO】

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

    ?php
        //引入配置文件
        include "../Config/config.php";
        class Model extends PDO
        {
            protected $tableName = "";//存储表名
            protected $sql = "";//存储最后执行的SQL语句
            protected $limit = "";//存储limit条件
            protected $order = "";//存储order排序条件
            protected $field = "*";//存储要查询的字段
            protected $where = "";//存储where条件
            protected $allFields = [];//存储当前表的所有字段
            /**
             * 构造方法 初始化
             * @param string $tableName 要操作的表名
             */
            public function __construct($tableName)
            {
                //连接数据库
                parent::__construct('mysql:host='.HOST.';dbname='.DB.';charset=utf8;port='.PORT,USER,PWD);
                //存储表名
                $this->tableName = PRE.$tableName;
                //获取当前数据表中有哪些字段
                $this->getFields();
            }
            /**
             * 获取当前表的所有字段
         * @return array 成功则返回一维数组字段
             */
            public function getFields()
            {
                //查看当前表结构
                $sql = "desc {$this->tableName}";
                $res = $this->query($sql);//返回pdo对象
              //var_dump($res);
                if ($res) {
                    $arr = $res->fetchAll(2);
                    //var_dump($arr);
                    //从二维数组中取出指定下标的列
                    $this->allFields =    array_column($arr,"Field");
                    return $this->allFields;
                } else {
                    die("表名错误");
                }
            }
            /**
             * 添加操作
             * @param array $data 要添加的数组
             * @return int 返回受影响行数
             */
            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}')";
                $this->sql = $sql;
                //执行并发送SQL,返回受影响行数
                return (int)$this->exec($sql);
            }
            /**
             * 删除操作
             * @param string $id 要删除的id
             * @return int 返回受影响行数
             */
            public function delete($id="")
            {
                //判断id是否存在
                if (empty($id)) {
                    $where = $this->where;
                }else{
                    $where = "where id={$id}";
                }
                $sql = "delete from {$this->tableName} {$where}";
          $this->sql = $sql;
                //执行并发送SQL,返回受影响行数
                return (int)$this->exec($sql);
            }
        /**
         * 修改操作
         * @param array $data 要修改的数组
         * @return int 返回受影响行数
         */
        public function update($data)
        {
          //判断是否是数组
          if (!is_array($data)){
            return $this;
          }
          //判断是否全是非法字段
          if (empty($data)) {
            die('全是非法字段');
          }
          $str = "";
          //过滤非法字段
          foreach ($data as $k=>$v) {
            //字段为id时,判断id是否存在的
            if ($k == "id"){
              $this->where = "where id={$v}";
              unset($data[$k]);
              continue;
            }
            //若字段不为id,则过滤后再拼接成set字段
            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}";
          //echo $sql;
          $this->sql = $sql;
          return (int)$this->exec($sql);
        }
        /**
         * 查询多条数据
         * @return array 成功返回二维数组,失败返回空数组
         */
            public function select()
        {
              $sql = "select {$this->field} from {$this->tableName} {$this->where} {$this->order} {$this->limit}";
          $this->sql = $sql;
          //执行SQL,结果集是一个对象
              $res = $this->query($sql);
              //判断是否查询成功,
          if ($res){
            //成功返回二维数组
            return $res->fetchAll(2);
          }
          //失败返回空数组
          return [];
        }
        /**
         * 查询一条数组
         * @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} {$this->order} limit 1";
          $this->sql = $sql;
          //执行sql,结果集为对象
          $res = $this->query($sql);
          //判断是否查询成功
          if ($res){
            //成功则返回一条数据(一维数组)
            $result = $res->fetchAll(2);
            return $result[0];
          }
          //失败返回空数组
          return [];
        }
        /**
         * 统计总数目
         * @return int 返回总数
         */
        public function count()
        {
          $sql = "select count(*) as total from {$this->tableName} {$this->where} limit 1";
          $this->sql = $sql;
          //执行SQL,结果集为对象
          $res = $this->query($sql);
          //处理结果集
          if ($res){
           $result = $res->fetchAll(2);
           //var_dump($result);
            return $result[0]["total"];
          }
          return 0;
        }
        /**
         * 设置要查询的字段信息
         * @param string $field 要查询的字段
         * @return object 返回自己,保证连贯操作
         */
        public function field($field)
        {
          //判断字段是否存在
          if (empty($filed)){
            return $this;
          }
          $this->field = $field;
          return $this;
        }
        /**
         * 获取最后执行的sql语句
         * @return string sql语句
         */
        public function _sql()
        {
          return $this->sql;
        }
        /**
         * where条件
         * @param string $where 要输入的where条件
         * @return object 返回自己,保证连贯操作
         */
        public function where($where)
        {
          $this->where = "where ".$where;
          return $this;
        }
        /**
         * order条件
         * @param string $order 要输入的order条件
         * @return object 返回自己,保证连贯操作
         */
        public function order($order)
        {
          $this->order = "order by ".$order;
          return $this;
        }
        /**
         * limit条件
         * @param string $limit 要输入的limit条件
         * @return object 返回自己,保证连贯操作
         */
        public function limit($limit)
        {
          $this->limit = "limit ".$limit;
          return $this;
        }
    }
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

    您可能感兴趣的文章:
    • php封装db类连接sqlite3数据库的方法实例
    • php db类库进行数据库操作
    • PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
    • PHP数据库表操作的封装类及用法实例详解
    • PHP封装的PDO数据库操作类实例
    • PHP数据库处理封装类实例
    • php简单数据库操作类的封装
    • PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
    • PHP封装的mysqli数据库操作类示例
    • PHP模型Model类封装数据库操作示例
    • PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
    上一篇:PHP模型Model类封装数据库操作示例
    下一篇:PHP的简单跳转提示的实现详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP封装的数据库模型Model类完整示例【基于PDO】 PHP,封,装的,数据库,模型,