前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP封装的数据库模型Model类完整示例【基于PDO】

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

作者头像
砸漏
发布2020-10-21 13:21:06
1.2K0
发布2020-10-21 13:21:06
举报
文章被收录于专栏:恩蓝脚本

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

代码语言:javascript
复制
<?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程序设计有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档