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

文章详细描述了如何在PHP中使用PDO封装数据库操作,包括创建数据表、定义数据库连接、以及在index.php和ModelBase.php中的CRUD操作实现。同时展示了如何通过自动加载机制管理控制器和基类。
摘要由CSDN通过智能技术生成
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

//定义当前请求模块
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引入基类
    //自动加载文件
    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
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控制器调用
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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP隔壁老王邻居

啦啦啦啦啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值