PHP封装的数据库模型Model类完整示例【基于PDO】
作者:小菜鸟有大梦想 发布时间:2023-11-15 21:06:42
标签: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程序设计有所帮助。
来源:https://blog.csdn.net/weixin_42526674/article/details/84074842


猜你喜欢
- 1、配置pycharm 依次点击"File"-->"Settings",进入"Edi
- 修改python plot折线图的坐标轴刻度,这里修改为整数:代码如下:from matplotlib import pyplot as p
- 最近没有项目做,闲来无事写了一个小demo,特此分享到脚本之家平台,供大家参考下,本文写的不好还请各位大侠见谅!功能及方法逻辑都注释在代码中
- 前言实现类似SQL的join操作,通过pd.merge()方法可以自由灵活地操作各种逻辑的数据连接、合并等操作可以将两个DataFrame或
- 当你执行大型程序的时候,突然出现exception,会让程序直接停止,这种对服务器自动程序很不友好,而python有着较好的异常捕获机制,不
- 写了个多层感知器,用bp梯度下降更新,拟合正弦曲线,效果凑合。# -*- coding: utf-8 -*-import numpy as
- 当前登入的用户以及他(她)的权限可以通过 RequestContext 在模板的context中使用。注意从技术上来说,只有当你使用了 Re
- 暂时是一个手动设置无向图中的边,用一个二维数组表示,后面会改进为用户自己定义无向图的边。学习python的新手,若大佬有解决的办法,希望不吝
- 字符串字符串常用操作拼接字符串拼接字符串需要使用‘+’运算符可完成对多个字符串的拼接。如str =
- 使用eslint和editorconfig方式使用eslint的好处1、避免运行时因格式问题报错2、方便团队合作,代码风格统一安装eslin
- 一、time时间模块import time1 、时间戳:time.time()时间戳(timestamp):时间戳表示的是从1970年1月1
- 其实有一个疑惑一直在小编心中,每一个代码段编写里,总会出现好多个函数,也许有人和小编有一样的认同感,后来,小编明白,每一个函数本身都是都有各
- 之前在《首都机场的点烟器》中分析了一个软件系统所处的状态并且列举了不同的状态所需要的展示给用户的各类信息,我们先简单回顾一下:要设计一个软件
- Hello, 大家好,又是我~ 大家有看过font set和一些要注意的基本问题以及通用字体族两篇文章后,应该对字体的基本有了一些了解。现
- 爬取网址:http://www.ultramanclub.com/allultraman/使用工具:pycharm,requests进入网页
- 《Patterns for Sign Up &Ramp Up》很早就读完了,之所以今天才写读后感,细细读完了发现,它更为接近吸引注册
- 一、SQLite简介SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard
- 最近遇到需要将关联表中的某个字段全部查询出来并且重新组合为一个字段,这个时候普通的连接查询就满足不了需求了,需要用到SQL函数来完成:ALT
- 本文实例为大家分享了opencv+python实现图像矫正的具体代码,供大家参考,具体内容如下需求:将斜着拍摄的文本图像进行矫正python
- Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下:1.在python安装目录的Lib