PHP最简单自定义自己的框架数据库封装调用(五)

news2024/10/3 4:34:39

1、实现效果调用实现数据增删改查封装

 

2、index.php 入口定义数据库账号密码

<?php

//定义当前请求模块
define("MODULE",'index');

//定义数据库
define('DB_HOST','localhost');//数据库地址
define('DB_DATABASE','aaa');//数据库
define('DB_USER','root');//数据库账号
define('DB_PWD','root');//数据库密码


require "./core/KJ.php";

3、KJ.php引入基类

    //自动加载文件
    public static function _autoload($className){

        switch ($className){
            //自动加载控制器
            case substr($className,-3)=='Crl':
                $path= CONTROLLER.'/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            //自动加载基类
            case substr($className,-4)=='Base':
                $path= KJ_CORE.'/base/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            default :
                break;
        }
    }

4、基类使用pdo封装增删改查 ModelBase.php

<?php
class ModelBase
{
    public $pdo = NULL;
    public function __construct(){
        $this->_connect();
    }
    private function _connect(){
        $host = DB_HOST;
        $db = DB_DATABASE;
        $user = DB_USER;
        $pass = 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());
        }
    }
    public function insert($table, $data) {
        // 准备SQL语句
        $fields = implode(', ', array_keys($data));
        $values = ':' . implode(', :', array_keys($data));
        $sql = "INSERT INTO $table ($fields) VALUES ($values)";
        // 绑定参数并执行SQL语句
        $stmt = $this->pdo->prepare($sql);
        foreach ($data as $key => $value) {
            $stmt->bindValue(':' . $key, $value);
        }
        return $stmt->execute();
    }
    public function delete($table, $condition, $params = [])
    {
        $sql = "DELETE FROM $table WHERE $condition";
        $stmt = $this->pdo->prepare($sql);
        foreach ($params as $key => $value) {
            $stmt->bindValue(":$key", $value);
        }
        $stmt->execute();
        return $stmt->rowCount();
    }

    public function update($table, $data, $condition, $params = [])
    {
        $sql = "UPDATE $table SET ";
        $set = [];
        foreach ($data as $key => $value) {
            $set[] = "$key = :$key";
        }
        $sql .= implode(', ', $set);
        $sql .= " WHERE $condition";

        $stmt = $this->pdo->prepare($sql);
        foreach ($data as $key => $value) {
            $stmt->bindValue(":$key", $value);
        }
        foreach ($params as $key => $value) {
            $stmt->bindValue($key, $value);
        }
        $stmt->execute();
        return $stmt->rowCount();
    }
    public function select($table, $condition = '', $params = [])
    {
        $sql = "SELECT * FROM $table";
        if ($condition) {
            $sql .= " WHERE $condition";
        }

        $stmt = $this->pdo->prepare($sql);
        foreach ($params as $key => $value) {

            $stmt->bindValue($key, $value);
        }
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

5、indexCrl.php控制器调用

class indexCrl{
    public function index(){
        $model= new ModelBase();
       // 插入数据
           $data = [
        'age' => 12,
        'name' => '小明',
        ];
        $model->insert('test', $data);

        // 查询数据
        $result = $model->select('test', 'name = :value', [':value' => '小明']);
        var_dump($result);
        // 更新数据
        $data = [
            'age' => '13',
        ];
      // 更新数据
       $model->update('test', $data, 'id = :id', [':id' => 1]);

       // 删除数据
        $model->delete('test', 'id = :id', ['id' => 1]);
    }
}

5、完整KJ.php代码

<?php

final class KJ{
    public static function run(){
        //定义常量
        self::_set_const();
        //创建模块目录
        self::_mk_module();
        //类自动加载
        spl_autoload_register(array(__CLASS__,'_autoload'));
        //运行框架
        self::_run();
    }
    //运行控制器中方法
    public static function _run(){
        $c=strtolower(isset($_GET['c'])?$_GET['c']:'index');
        $a=strtolower(isset($_GET['a'])?$_GET['a']:'index');
        $c.='Crl';
        if(!class_exists($c)){
            die("控制器".$c."不存在");
        }

        $obj=new $c();
        if(!method_exists($obj,$a)){
            die("控制器".$c."下".$a."方法不存在");
        }
        $obj->$a();
    }
    //自动加载文件
    public static function _autoload($className){

        switch ($className){
            //自动加载控制器
            case substr($className,-3)=='Crl':
                $path= CONTROLLER.'/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            //自动加载基类
            case substr($className,-4)=='Base':
                $path= KJ_CORE.'/base/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            default :
                break;
        }
    }


    //定义常量
    public static function _set_const(){
        //获取框架核心路径 都替换/以便兼容linux
        $path=str_replace('\\','//',__FILE__);
        //定义常量
        define("KJ_CORE",dirname($path)); //框架核心路径
        define('ROOT_PATH',dirname(KJ_CORE));//项目根目录
        define('MODULE_PATH',ROOT_PATH.'/'.MODULE);//模块

        define('CONTROLLER',MODULE_PATH.'/controller');//定义控制器
        define('MODEL',MODULE_PATH.'/model');//定义模型
        define('VIEW',MODULE_PATH.'/view');//定义显示成
    }
    //自动创建模块目录
    public static function _mk_module(){
        $arr=[
            MODULE_PATH,
            CONTROLLER,
            MODEL,
            VIEW,
        ];
        foreach ($arr as $v){
            is_dir($v) || mkdir($v,0777,true);
        }
    }

}
KJ::run();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/864793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解读百威亚太2023上半年财报:啤酒大年百威如何重塑高端化之路?

随着消费者的需求提升&#xff0c;啤酒行业向高端化发展&#xff0c;其中知名度较高的百威亚太、华润啤酒、青岛啤酒、燕京啤酒、嘉士伯等品牌在高端市场持续鏖战&#xff0c;实际成果如何也可以从业绩一探究竟。 以百威亚太为例。8月3日&#xff0c;百威亚太发布2023年上半年…

腾讯云服务器购买流程_三种方法图文指南

腾讯云服务器购买流程直接在活动上成本更低&#xff0c;在云服务器CVM或轻量应用服务器页面自定义选择比较gui&#xff0c;但是自定义云服务器CPU内存带宽配置选择范围广&#xff0c;活动上只能选择固定的活动机&#xff0c;选择范围窄&#xff0c;但是云服务器成本低。腾讯云服…

【python技巧】文本文件的读写操作

【python技巧】文本文件的读写操作 0. 背景1. file库的文件操作1.1 打开文件---file.open()1.2 读取文件---file.read()1.3 写入文件---file.write()1.4 查找内容---file.seek() 2. re库的文本处理参考资料 0. 背景 最近在写后端接口的时候&#xff0c;需要对.c、.conf等类型的…

腾讯云服务器配置升级方法_CPU内存带宽存储扩大流程

腾讯云服务器CPU、内存、硬盘和公网带宽都可以升级或降低配置&#xff0c;在云服务器控制台的“资源调整”中即可操作&#xff0c;调整配置用于升级或降级CPU内存&#xff0c;调整网络可用于更改公网带宽大小&#xff0c;云硬盘扩容可用于调整硬盘大小&#xff0c;腾讯云服务器…

技术中台之困:业务需求开发背后的拖累

技术中台作为企业数字化转型的重要支撑&#xff0c;曾一度备受瞩目。然而&#xff0c;近年来&#xff0c;技术中台的声势逐渐式微&#xff0c;曾经的辉煌渐渐褪去。本文将深入探讨技术中台为何没落的原因&#xff0c;并从中汲取教训。 技术中台起源于企业数字化转型的需求&…

由于找不到msvcp100.dll无法继续执行代码怎么解决

当遇到程序无法正常运行&#xff0c;提示缺少msvcp100.dll文件时&#xff0c;最初的反应可能是困惑和不知所措。然而&#xff0c;通过修复msvcp100.dll文件&#xff0c;我发现这个问题实际上并不复杂&#xff0c;并且可以通过一些简单的步骤解决。 在修复msvcp100.dll文件的时候…

谱包络之pysptk和pyworld

谱包络之pysptk和pyworld 谱包络可以直接用于语音的合成&#xff0c;常用的两个计算谱包络的库pysptk和pyword。 先看看代码&#xff1a; 一段语音x&#xff0c;采样率16000Hz pysptk import pysptkframe_length 1024 hop_length 80 order 25 alpha 0.41 frames libro…

JavaWeb学习|JSTL表达式

1.什么是JSTL表达式&#xff1f; JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签&#xff0c;可以供我们使用&#xff0c;标签的功能和Java代码一样 在JSP页面文件中使用JSTL表达式&#xff0c;首先需要引入核心标签库 同时&#xff0c;也要把JSTL的jar包在to…

家电维修小程序开发指南:从零搭建到上线

随着科技的发展和人们生活水平的提高&#xff0c;家电已经成为人们生活中不可或缺的一部分。然而&#xff0c;随之而来的是家电维修门店业务的繁忙和效率的考验。为了提高家电维修门店的效率和服务质量&#xff0c;建立一个便捷高效的小程序已成为必要的选择。 本文将介绍一个简…

轻松上手流体分析

SOLIDWORKS FloXpress 是一个流体力学应用程序&#xff0c;可计算流体是如何穿过零件或装配体模型的。 根据算出的速度场&#xff0c;可以找到设计中有问题的区域&#xff0c;以及在制造任何零件之前对零件进行改进。 SOLIDWORKS FloXpress 向导会引导您完成以下步骤&#xff1…

C#类型转换

&#x1f35f;数据类型 大体分为三个大类型&#xff1a;整型&#xff08;其中又分为有符号整型、无符号整型&#xff09;、浮点型、特殊类型 注意&#xff1a;浮点数在初始化时要在值后加上后缀&#xff0c;双精度浮点数decimal的后缀为“M”、单精度浮点数double和float的后…

配置docker,案例复现

配置docker(系统为centos) 1.检查操作系统环境: docker要求CentOS系统的内核版本高于 3.10 &#xff0c;通过 uname -r 命令查看你当前的内核版本是否支持安装docker 2.查看你是否拥有旧的版本&#xff0c;有的话卸载&#xff0c;没有的话直接略过该步骤 sudo yum remove d…

基于PaddleOCR的车牌检测识别

基于PaddleOCR的车牌检测识别 前言前提条件相关介绍PaddleOCR环境要求车牌检测识别准备数据集车牌文本检测下载预训练模型微调、训练车牌检测数据集评估训练好的模型导出模型 车牌文本识别下载预训练模型微调、训练车牌识别数据集评估训练好的模型导出模型 进行预测测试结果图 …

【Windows系统】磁盘、Partition和Volume的联系与区别

1、磁盘 Disk&#xff0c;磁盘。 以下摘自微软 磁盘设备和分区 - Win32 apps | Microsoft Learn 硬盘由一组堆积的盘片组成&#xff0c;其中每个盘片的数据都以电磁方式存储在同心圆或 轨道中。 每个盘片都有两个头&#xff0c;一个在盘片的两侧&#xff0c;在磁盘旋转时读取…

SAS-proc transpose转置

一、语法 by&#xff1a;纵向变量&#xff0c;不转置&#xff0c;保留的变量&#xff0c;by使用需要先排序。 id&#xff1a;需要转置的变量。 var&#xff1a;新数据集中的数据。 idlabel&#xff1a;转置变量的标签。 copy&#xff1a;不转置的变量直接拷贝到输出数据集中。…

Python ImportError报错:No module named ‘numpy.core_multiarray_umath‘

文章目录 背景Import 报错是版本问题吗&#xff1f;删除pandas在Visual Studio中设置Python 环境为什么要在Visual Studio IDE下继续安装Python package在Visual Studio安装numpy和pandasPYTHONPATHDebug模式下继续报错配置Release 工程优化不便之处 1不便之处 2后续 参考 背景…

Reinforcement Learning with Code【Code 5. Policy Gradient Methods】

Reinforcement Learning with Code【Code 5. Policy Gradient Methods】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundati…

想要延长Macbook寿命?这六个保养技巧你必须get!

Mac作为我们工作生活的伙伴&#xff0c;重要性不需要多说。但在使用的过程中&#xff0c;我们总会因不当操作导致Mac出现各种问题。 要想它长久的陪伴&#xff0c;平时的维护与保养自然不能少&#xff0c;Mac的保养很重要的两点就是硬件保养和电脑系统保养&#xff0c;硬件保养…

企业服务器中了Locked勒索病毒怎么办,勒索病毒解密有哪些步骤

随着网络技术的不断发展&#xff0c;勒索病毒攻击成为了企业面临的一种风险。近期&#xff0c;我们收到某医药公司的求助&#xff0c;企业的服务器数据库遭到了locked勒索病毒的攻击&#xff0c;导致企业服务器内的许多重要数据被加密无法正常读取&#xff0c;不仅影响到了企业…

智能合约 -- 常规漏洞分析 + 实例

1.重入攻击 漏洞分析 攻击者利用合约漏洞&#xff0c;通过fallback()或者receive()函数进行函数递归进行无限取钱。 刚才试了一下可以递归10次&#xff0c;貌似就结束了。 直接看代码: 银行合约&#xff1a;有存钱、取钱、查看账户余额等函数。攻击合约: 攻击、以及合约接…