PHP之Model类封装(PDO)

本文介绍了一种PHP中的Model类封装方法,通过继承PDO类实现数据库操作的封装,包括添加、删除、修改和查询等功能。同时,文章详细解释了如何通过构造函数初始化、获取字段、执行SQL语句等关键步骤。

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

PHP之Model类封装(PDO)

<?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;
        }
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sheliutao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值