php教程

超轻量级php框架startmvc

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

更新时间:2020-04-03 11:58:46 作者:startmvc
本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下:<?php/

本文实例讲述了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 封装 数据库模型 Model类 PDO