当前位置: 首页 > news >正文

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

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代码

<?phpfinal 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.lryc.cn/news/118780.html

相关文章:

  • 使用Redis来实现点赞功能的基本思路
  • 【黑马头条之app端文章搜索ES-MongoDB】
  • Nginx安装以及LVS-DR集群搭建
  • 后端开发9.商品类型模块
  • spring框架自带的http工具RestTemplate用法
  • 【flink】Checkpoint expired before completing.
  • 【论文阅读】NoDoze:使用自动来源分类对抗威胁警报疲劳(NDSS-2019)
  • 【ARM64 常见汇编指令学习 16 -- ARM64 SMC 指令】
  • uprobe trace多线程mutex等待耗时
  • Linux 和 MacOS 中的 profile 文件详解(一)
  • 不用技术代码,如何制作成绩查询系统?
  • flinksql sink to sr often fail because of nullpoint
  • 达梦数据库:Error updating database. Cause: dm.jdbc.driver.DMException: 数据未找到
  • 电脑怎么查看连接过的WIFI密码(测试环境win11,win10也能用)
  • 处理数据部分必备代码
  • layui 集成 ztree异步加载
  • LeetCode面向运气之Javascript—第27题-移除元素-98.93%
  • 谷歌云 | 电子商务 | 如何更好地管理客户身份以支持最佳的用户体验
  • 行业追踪,2023-08-09
  • 视图、存储过程、函数、触发器
  • 数学建模学习(10):遗传算法
  • 私域流量整合:社群裂变的综合策略
  • Redis的RDB持久化
  • 三、MySql表的操作
  • 【模型加速部署】—— Pytorch自动混合精度训练
  • 【Qt】信号槽的三种连接方式
  • Jtti:Ubuntu静态IP地址怎么配置
  • iconfont 使用
  • 基于java冰雪旅游服务网设计与实现
  • django处理分页