登录  /  注册
博主信息
博文 94
粉丝 0
评论 0
访问量 111273
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
【PHP】MVC原理与数据模型类的编写
可乐随笔
原创
1570人浏览过

MVC原理与数据模型类的编写

1. 应用入口

<?phpnamespace core;//应用入口,例如admin // admin.php => admin// echo strstr(basename(__FILE__),'.',true);echo basename(__FILE__,'.php');

2. 数据库连接类

<?php//数据库操作类namespace core;require __DIR__ . '/./funcs.php';require __DIR__ . '/./Query.php';define('CONFIG', require __DIR__ . '/../config.php');use PDO;class Db{    protected static PDO $db;    //1.连接数据库    protected static function connect(string $dsn, string $username, string $password)    {        self::$db = new PDO($dsn, $username, $password);    }    //2.静态委托    //$name:方法名    //$arguments:参数数组    public static function __callStatic($name, $arguments)    {        //1.连接数据库        $dsn = CONFIG['database']['type'];        $dsn .= ':dbname=';        $dsn .= CONFIG['database']['dbname'];        $username = CONFIG['database']['username'];        $password = CONFIG['database']['password'];        static::connect($dsn, $username, $password);        //2.实例化数据库操作类Query.php        $query = new Query(static::$db);        return call_user_func_array([$query, $name], $arguments);    }}// $result = Db::table('users')->field('id,uname,email')->where('id>3')->order('id','desc')->limit(3)->page(1)->select();// $rowCount = Db::table('users')->insert(['uname' => 'mhr', 'email' => 'mhr@qq.com']);// $rowCount = Db::table('users')->where('id=3')->update(['uname' => 'mhr', 'email' => 'mhr@qq.com']);$rowCount = Db::table('users')->where('id=3')->delete();d($rowCount);

3.公共函数库类

<?phpnamespace core;function d(...$args){    foreach ($args as $item) {        $result = var_export($item,true);        printf('<pre>%s</pre>',$result);    }}

4.数据库配置类

<?php//框架的默认设置return [    //1.应用配置    'app' => [        'debug' => false,        'default_controller' => 'Index',        'default_action' => 'customer',    ],    //2.数据库配置    'database' => [        'type' => 'mysql',        'host' => '127.0.0.1',        'port' => '3306',        'username' => 'root',        'dbname' => 'phpedu',        'password' => 'root',        'charset' => 'utf8'    ],];

5.增删改查类Query.php

<?phpnamespace core;use PDO;//数据库查询类class Query{    protected PDO $db;    protected string $table;    protected string $field = '*';    protected string $limit = '1';    protected string $where = '';    protected string $order = '';    //查询规则数组    protected array $opts = [];    //构造器:连接数据库    public function __construct(PDO $db)    {        $this->db = $db;    }    //设置数据表    public function table(string $table): self    {        $this->table = $table;        //返回当前对象,为了链式调用        return $this;    }    //设置数据表字段    public function field(string $field = '*'): self    {        $this->field = $field;        return $this;    }    //设置数据表查询数量    public function limit(string $num = '1'): self    {        $this->limit = $num;        $this->opts['limit'] = " LIMIT $num";        return $this;    }    //设置数据表分页数量    public function page(string $num = '1'): self    {        $this->opts['offset'] = ' OFFSET ' . ($num - 1) * $this->limit;        return $this;    }    //设置数据表查询条件    public function where(string $where = ''): self    {        $this->opts['where'] = ' WHERE ' . $where;        return $this;    }    //设置数据表排序方法    public function order($field, string $order = 'DESC'): self    {        $this->opts['order'] = ' ORDER BY ' . $field . ' ' . $order;        return $this;    }    //执行多条查询    public function select(): array    {        $sql = 'SELECT ' . $this->field . ' FROM ' . $this->table;        $sql .= $this->opts['where'] ?? null;        $sql .= $this->opts['order'] ?? null;        $sql .= $this->opts['limit'] ?? null;        $sql .= $this->opts['offset'] ?? null;        $stmt = $this->db->prepare($sql);        $stmt->execute();        //查看生成的SQL语句        $stmt->debugDumpParams();        return $stmt->fetchAll(PDO::FETCH_ASSOC);    }    //单条查询    public function find(): array    {        $sql = 'SELECT ' . $this->field . 'FROM ' . $this->table;        $sql .= $this->opts['where'] ?? null;        //查询并验证        //获取结果集        $stmt = $this->db->prepare($sql);        $stmt->execute();        //查看生成的SQL语句        $stmt->debugDumpParams();        //清空查询条件        $this->opts = [];        return $stmt->fetch(PDO::FETCH_ASSOC);    }    //新增数据    public function insert(array $data): int    {        //拼接传入的关联数据        $str = '';        foreach ($data as $k => $v) {            $str .= $k . '= "' . $v . '",';        }        //拼装时,要去掉最后一个逗号        $sql = 'INSERT ' . $this->table . ' SET ' . rtrim($str, ', ');        //查看SQL并进行测试        echo $sql;        $stmt = $this->db->prepare($sql);        $stmt->execute();        //外面判断返回值,就知道是否插入成功        return $stmt->rowCount();    }    //更新数据    public function update(array $data): int    {        //Update()方法必须使用where()条件,禁止无条件更新        //拼接传入的数组        $str = '';        foreach ($data as $k => $v) {            $str .= $k . '= "' . $v . '",';        }        $sql = 'UPDATE ' . $this->table . ' SET ' . rtrim($str, ',');        $sql .= $this->opts['where'] ?? die('禁止无条件更新');        //查看SQL语句并进行测试        echo $sql;        $stmt = $this->db->prepare($sql);        $stmt->execute();        return $stmt->rowCount();    }    //删除数据    public function delete(): int    {        $sql = 'DELETE FROM ' . $this->table;        $sql .= $this->opts['where'] ?? die('禁止无条件删除');        //查看SQL语句并进行测试        echo $sql;        $stmt = $this->db->prepare($sql);        $stmt->execute();        return $stmt->rowCount();    }}

4.

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学