• 习近平总书记重要讲话在内蒙古各界引发热烈反响 2019-05-22
  • 女性之声——全国妇联 2019-05-21
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-21
  • 好朋友、和平奖可能人家抱了。 2019-05-20
  • 【北京荣祥月达车型报价】北京荣祥月达综合店车型价格 2019-05-20
  • 脸上长痘代表对应内脏有问题?专家:未发现相关性 2019-05-19
  • 和静县首届东归节6月23日开幕 2019-05-18
  • 太空监视飞行器相关新闻 2019-05-18
  • 警车化身“产房” 冰雪路上“生命接力” 2019-05-17
  • 百部网络正能量动漫音视频作品评选 2019-05-16
  • 初二少年与家长争吵离家出走 客运站人员发觉异样后拦下 2019-05-15
  • 陈海滢的专栏作者中国国家地理网 2019-05-14
  • 乐平市:开展流动党校“培训在基层”活动(图) 2019-05-13
  • 你遇到了吗用户吐槽升iOS 11.4后耗电过快用户吐槽升iOS11后耗电过快-行情资讯 2019-05-12
  • 兼容海量游戏外设 微软打碟机竟是万用控制器 2019-05-12
  • 香港赛马会内部透密:PHP封装的数据库模型Model类完整示例【基于PDO】

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw  更新时间:2019年03月14日 11:56:41   作者:小菜鸟有大梦想   我要评论

    这篇文章主要介绍了PHP封装的数据库模型Model类,结合实例形式分析了php基于PDO针对mysql数据库常见增删改查、统计、判断等相关操作封装与使用技巧,需要的朋友可以参考下

    本文实例讲述了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程序设计有所帮助。

    相关文章

    最新评论

  • 习近平总书记重要讲话在内蒙古各界引发热烈反响 2019-05-22
  • 女性之声——全国妇联 2019-05-21
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-21
  • 好朋友、和平奖可能人家抱了。 2019-05-20
  • 【北京荣祥月达车型报价】北京荣祥月达综合店车型价格 2019-05-20
  • 脸上长痘代表对应内脏有问题?专家:未发现相关性 2019-05-19
  • 和静县首届东归节6月23日开幕 2019-05-18
  • 太空监视飞行器相关新闻 2019-05-18
  • 警车化身“产房” 冰雪路上“生命接力” 2019-05-17
  • 百部网络正能量动漫音视频作品评选 2019-05-16
  • 初二少年与家长争吵离家出走 客运站人员发觉异样后拦下 2019-05-15
  • 陈海滢的专栏作者中国国家地理网 2019-05-14
  • 乐平市:开展流动党校“培训在基层”活动(图) 2019-05-13
  • 你遇到了吗用户吐槽升iOS 11.4后耗电过快用户吐槽升iOS11后耗电过快-行情资讯 2019-05-12
  • 兼容海量游戏外设 微软打碟机竟是万用控制器 2019-05-12