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

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

2、创建数据表

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

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

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";

4、KJ.php引入基类

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;
        }
    }

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

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);
    }
}

6、indexCrl.php控制器调用

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]);
    }
}

7、完整KJ.php代码

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();
相关推荐
想变成自大狂4 分钟前
C++中的异构容器
开发语言·c++
qq_172805595 分钟前
GO GIN 推荐的库
开发语言·golang·gin
神仙别闹10 分钟前
基于Python+SQLite的课程管理系统
数据库·sqlite
friklogff12 分钟前
【C#生态园】构建你的C#操作系统:框架选择与实践
服务器·开发语言·c#
掐指一算乀缺钱13 分钟前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
就这个java爽!24 分钟前
JAVA网络编程【基于TCP和UDP协议】超详细!!!
java·开发语言·网络·tcp/ip·udp·eclipse·idea
环能jvav大师32 分钟前
基于R语言的统计分析基础:使用dplyr包进行数据操作
大数据·开发语言·数据分析·r语言
少年负剑去34 分钟前
django分发路由
数据库·django·sqlite
飞翔的佩奇42 分钟前
xxl-job适配sqlite本地数据库及mysql数据库。可根据配置指定使用哪种数据库。
数据库·spring boot·mysql·sqlite·xxl-job·任务调度
懒洋洋大魔王1 小时前
7.Java高级编程 多线程
java·开发语言·jvm