PHP自己的框架PDO数据表前缀、alias、model、table、join方法实现(完善篇九--结束)
一、实现功能,数据表前缀、alias、model、table、join方法实现


二、表前缀实现
1、config.php增加表前缀
'DB_PEX'=>'fa_',//数据库前缀
2、增加表前缀方法function.php
function model($table){$model=new ModelBase($table,config("DB_PEX"));return $model;
}
function table($table){return new ModelBase($table);
}
3、PDO数据表增加表前缀ModelBase.php
private $pex="";//表前缀public function __construct($table=null,$pex=""){$this->pex=$pex;if($table){$this->table=$this->pex.$table;}if(!$this->table){die("no table" );}$this->_connect();$this->_opt();}
三、alias数据表别名和join实现实现ModelBase.php
private function _opt(){$this->opt=array('filed'=>'*','where'=>'','group'=>'','having'=>'','order'=>'','limit'=>'','alias'=>'','join'=>'',);}public function alias($as){$this->opt['alias']= ' as '.$as." ";return $this;}public function join($join,$condition,$type=''){$this->opt['join']= " {$type} join ".$this->pex.trim($join)." on {$condition}";return $this;}public function select(){$sql = "SELECT ".$this->opt['filed']. " FROM ".$this->table.$this->opt['alias'].$this->opt['join'].$this->opt['where'].$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];$stmt = $this->pdo->prepare($sql);$stmt->execute();return $stmt->fetchAll(PDO::FETCH_ASSOC);}
四、控制器实现,数据表前缀、alias、model、table、join方法查询
public function index(){$data= model("test")->filed('t.*,r.role')->alias('t')->join('role r','t.id=r.testId','left')->select();var_dump($data);$data= table("fa_test")->select();var_dump($data);}
五、完整ModelBase.php代码
<?php
class ModelBase
{public $pdo = NULL;public $table = NULL;public $opt;private $pex="";//表前缀public function __construct($table=null,$pex=""){$this->pex=$pex;if($table){$this->table=$this->pex.$table;}if(!$this->table){die("no table" );}$this->_connect();$this->_opt();}private function _connect(){if($this->pdo){return true;}$host = config('DB_HOST');$db = config('DB_DATABASE');$user = config('DB_USER');$pass =config('DB_PWD');$dsn = "mysql:host=$host;dbname=$db;charset=utf8";try {$this->pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);} catch (PDOException $e) {die("数据库连接失败: " . $e->getMessage());}}private function _opt(){$this->opt=array('filed'=>'*','where'=>'','group'=>'','having'=>'','order'=>'','limit'=>'','alias'=>'','join'=>'',);}public function alias($as){$this->opt['alias']= ' as '.$as." ";return $this;}public function join($join,$condition,$type=''){$this->opt['join']= " {$type} join ".$this->pex.trim($join)." on {$condition}";return $this;}public function where($where){$this->opt['where']= ' WHERE '.$where;return $this;}public function order($order){$this->opt['order']= ' ORDER BY '.$order;return $this;}public function group($group){$this->opt['group']= ' GROUP BY '.$group;return $this;}public function having($having){$this->opt['having']= ' having '.$having;return $this;}public function filed($filed){$this->opt['filed']= $filed;return $this;}public function limit($limit){$this->opt['limit']= ' limit '.$limit;return $this;}public function select(){$sql = "SELECT ".$this->opt['filed']. " FROM ".$this->table.$this->opt['alias'].$this->opt['join'].$this->opt['where'].$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];$stmt = $this->pdo->prepare($sql);$stmt->execute();return $stmt->fetchAll(PDO::FETCH_ASSOC);}public function find(){$data=$this->limit(1)->select();return current($data);}public function delete(){$sql = "DELETE FROM ".$this->table.$this->opt['where'];$stmt = $this->pdo->prepare($sql);$stmt->execute();return $stmt->rowCount();}public function insert( $data) {// 准备SQL语句$fields = implode(', ', array_keys($data));$values = ':' . implode(', :', array_keys($data));$sql = "INSERT INTO ". $this->table." (".$fields.") VALUES (".$values.")";// 绑定参数并执行SQL语句$stmt = $this->pdo->prepare($sql);foreach ($data as $key => $value) {$stmt->bindValue(':' . $key, $value);}return $stmt->execute();}public function update( $data){if(empty($this->opt['where'])) die('更新语句必须有were条件');$up='';foreach ($data as $k=>$v){$up.="`".$k."`='".$v."'";}$sql="update ".$this->table.' set '.$up.$this->opt['where'];$stmt = $this->pdo->prepare($sql);$stmt->execute();return $stmt->rowCount();}}
相关文章:
PHP自己的框架PDO数据表前缀、alias、model、table、join方法实现(完善篇九--结束)
一、实现功能,数据表前缀、alias、model、table、join方法实现 二、表前缀实现 1、config.php增加表前缀 DB_PEX>fa_,//数据库前缀 2、增加表前缀方法function.php function model($table){$modelnew ModelBase($table,config("DB_PEX"));return $m…...
华为OD:敏感字段加密
题目描述: 给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线_进行分割; 3、可以通过两个双引号”"来标识包含下划线…...
IDEA新建SpringBoot项目时启动编译报错:Error:java: 无效的源发行版: 17
文章目录 原因检查解决步骤修改jdk修改SpringBoot版本 原因 出现这种错误的原因可能是: 本机默认使用(编译)的jdk与该项目所使用的jdk版本不同。 jdk版本不适用于这个Idea,很典型的一个例子就是使用的Idea是2020的,而…...
【云原生进阶之PaaS中间件】第一章Redis-2.3.3集群模式
1 集群模式 Redis集群是一个提供在多个Redis节点之间共享数据的程序集。它并不像Redis主从复制模式那样只提供一个master节点提供写服务,而是会提供多个master节点提供写服务,每个master节点中存储的数据都不一样,这些数据通过数据分片的方式被自动分割到不同的master节点上…...
游戏发行商能够提供什么服务?
游戏发行商可以为游戏开发者提供广泛的服务,以帮助他们将游戏成功地引入市场并取得更好的业绩。以下是游戏发行商可能提供的一些服务: 市场营销和宣传:发行商通常具有丰富的市场营销经验,可以制定并执行有效的宣传和营销策略。他们…...
Linux 多进程解决客户端与服务器端通信
写一个服务器端用多进程处理并发,使两个以上的客户端可以同时连接服务器端得到响应。每当接受一个新的连接就fork产生一个子进程,让子进程去处理这个连接,父进程只用来接受连接。 与多线程相比的不同点:多线程如果其中一个线程操…...
Scala的模式匹配
Scala的模式匹配 Scala 中的模式匹配类似于Java 中的 switch 语法:下面是java中switch代码: int i 10 switch (i) {case 10 :System.out.println("10");break; case 20 :System.out.println("20");break; default :System.out.pr…...
HttPClient简介及示例:学习如何与Web服务器进行通信
文章目录 前言一、引入依赖二、使用步骤1.创建被调用者2.创建调用者三、结果被调用者服务:调用者服务: 总结 前言 欢迎来到本篇博客,这是一个关于HttPClient的入门案例的指南。🎉 在今天的网络世界中,与服务器进行数据…...
STS4 New 安装Spring Bean Configuration File
背景介绍 在创建spring项目后,如果想想创建spring bean Configuration的时候,发下菜单没有这个选项,需要通过下载Spring Roo插件可满足该操作。 参考案例 参考地址: STS4 New 菜单没有Spring Bean Configuration File选项_SQZHA…...
Java经典面试题(异或运算)
不爱生姜不吃醋⭐️⭐️⭐️ 🌻如果本文有什么错误的话欢迎在评论区中指正哦💗 🌻看完之后觉得不错的话麻烦动动小手点个赞赞吧👍 🌻与其明天开始,不如现在行动!💪 🌻大家…...
No primary or single unique constructor found for interface java.util.List
1.问题描述 前端 请求的参数 是 query形式, 参数在url中 报错信息: java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List2.解决办法 controller中的 请求方法 参数 加上 RequestParam...
C#关于WebService中File.Exists()处理远程路径的异常记录
目录 前言方案一打开网站对应的程序池的高级设置按下图步骤设置凭据重启网站若方案一未能解决,请继续尝试方案二👇 方案二从控制面板进入到 凭据管理器为windows凭据添加凭据点击**Windows凭据**,并点击**添加Windows凭据**键入远程路径的地址…...
JavaWeb_LeadNews_Day10-Xxljob, Redis实现定时热文章
JavaWeb_LeadNews_Day10-Xxljob, Redis实现定时热文章 xxl-job概述windows部署调度中心docker部署调度中心 xxl-job入门案例xxl-job分片广播热点文章定时计算思路分析具体实现热文章计算定时计算 查询文章接口改造来源Gitee xxl-job概述 windows部署调度中心 运行 xxl-job\do…...
【WebRTC---源码篇】(二:二)视频源VideoSourceBase
作用 这个类继承自VideoSourceInterface<webrtc::VideoFrame>模板类,并且可以处理webrtc::VideoFrame class VideoSourceBase : public VideoSourceInterface<webrtc::VideoFrame> 重要成员变量 struct SinkPair {SinkPair(VideoSinkInterface<webrtc::Vid…...
Linux_8_磁盘存储和文件系统
1 磁盘结构 1.1 设备文件 一切皆文件: open(),read(),write(),close() 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 设备号码: 主设备号 major number,标识设备类型 次设备号 minor number,标识同一类型下的不同设备 设备类型:…...
VS + QT 封装带UI界面的DLL
一、创建编译DLL的项目 1.新建Qt Class Liabrary 2.新建项目,选择Qt Widgets Class 3.新建C类,可以在此类里面写算法函数用于调用。 4.下面是添加完Qt窗体类和C类之后的项目截图 5.修改头文件并编译 将uidemo_global.h中的ifdef内容复制到dialog.h上…...
逆向工程-架构真题(二十)
结构化程序设计采用自顶向下、逐步求精及模块化程序设计方法,通过()三种基本控制结构可以构造出任何单入口单出口程序。 顺序、选择和嵌套顺序、分支和循环分支、并发和循环跳转、选择和并发 答案:B 解析: 结构化设…...
Zookeeper 入门
第 1 章 Zookeeper 入门 1.1概述 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将…...
记录--前端使用a链接下载内容增加loading效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 问题描述:最近工作中出现一个需求,纯前端下载 Excel 数据,并且有的下载内容很多,这时需要给下载增加一个 loading 效果。 代码如下: // util…...
如何获取用户的ip地址
用户的 IP 地址可能会被隐藏或者修改,例如使用代理服务器、VPN 等工具,这样就无法准确获取用户的真实 IP 地址。 除了以上特殊情况,一般情况下 用户访问可能会经过一下链路 : 前端—>nginx—>网关—>服务 。 一般情况下后…...
布里渊散射与机器学习势场协同表征MOF力学性能
1. 项目概述:当布里渊散射遇见机器学习势场在材料科学的前沿探索中,我们常常面临一个核心挑战:如何精确、无损地获取复杂材料的本征力学性能,尤其是那些结构精巧但晶体尺寸微小的新材料。金属有机框架(MOFs)…...
[智能体-28]:Python HTTP 请求库:requests 背景、原理、作用 完整版详解
一、全称与字面含义Requests:英文本意「请求、申请」Python 中:HTTP 请求库二、诞生背景Python 原生自带 urllib、urllib2语法冗长、写法繁琐、兼容性差、使用门槛高。2011 年 Kenneth Reitz 开发 requests口号:HTTP for Humans(给…...
PearSAN框架:用PearSOL损失与VCA采样破解纳米光子学逆设计难题
1. 项目概述:当机器学习遇上纳米光子学逆设计在纳米光子学领域,我们常常面临一个“反着来”的工程难题:给定一个我们梦寐以求的光学性能目标,比如在特定波段实现近乎完美的光吸收,如何从浩如烟海的可能结构中ÿ…...
建筑项目进度延误率下降37%的秘密:一个轻量化AI Agent工作流,已在12个EPC项目中闭环验证
更多请点击: https://codechina.net 第一章:建筑项目进度延误率下降37%的秘密:一个轻量化AI Agent工作流,已在12个EPC项目中闭环验证 在某头部工程总承包(EPC)企业落地的轻量化AI Agent工作流,…...
83、CAN FD物理层核心差异:更高速率与更灵活的位时序
CAN FD物理层核心差异:更高速率与更灵活的位时序 从一次现场总线崩溃说起 去年在给某新能源车企做BMS(电池管理系统)升级时,遇到一个让我熬夜到凌晨三点的怪问题。传统CAN总线跑500kbps,整车十几个节点通信稳如老狗。客户要求把电池包内部的状态数据(单体电压、温度、S…...
STIML框架:融合标度理论与机器学习的企业增长预测新范式
1. 项目概述:当标度律遇见机器学习在金融分析和企业研究领域,预测一家公司的未来增长,就像试图预测一艘巨轮在复杂洋流中的航迹。传统上,我们有两类“航海图”:一类是基于物理定律的“机制模型”,它告诉你船…...
你的Linux启动慢?可能是UEFI这七个阶段在“摸鱼”!性能调优实战指南
Linux启动慢?UEFI七阶段性能调优实战指南当你的Linux系统启动速度像蜗牛爬行时,问题可能隐藏在UEFI启动的七个关键阶段中。本文将带你深入UEFI启动流程的每个环节,揭示可能导致延迟的"摸鱼"行为,并提供针对性的优化方案…...
保姆级教程:用Python脚本把UAVDT无人机数据集转成YOLOv5/YOLOv8能用的格式
无人机视觉实战:UAVDT数据集高效转YOLO格式全流程解析无人机目标检测正成为计算机视觉领域的热门方向,而UAVDT作为最具代表性的低空无人机检测数据集,其丰富的场景覆盖和精准标注使其成为算法验证的黄金标准。但原始数据与YOLO训练格式的不匹…...
别再只跑模型了!用FAD、NDB、JSD给你的AI生成声音打个分(Python实战避坑)
用FAD、NDB、JSD给你的AI生成声音打个分(Python实战避坑指南)当你在深夜终于调试完最后一个神经网络层,按下生成按钮听到第一段AI合成的声音时,那种成就感无与伦比。但很快,一个更棘手的问题出现了:这段声音…...
Claude + MS Project双引擎协同术:5分钟完成跨时区资源冲突检测与重排程,压测显示交付准时率提升41.6%
更多请点击: https://codechina.net 第一章:Claude项目管理应用技巧 Claude 作为具备强推理与长上下文理解能力的大语言模型,可深度融入项目管理全生命周期,提升需求分析、任务拆解、进度追踪与风险预判效率。关键在于将其定位为…...
