• PHP封装数据库


    (1)按照步骤封装数据库

    ①引入抽象类和抽象方法,即引入模板;

    ②继承抽象类,注意参数(规定几个就传入几个);

    ③逐个写入抽象方法,必须一一对应;(抽象方法必须一一引入,否则会报错-->有个抽象方法没有被实现)

    ④给抽象方法名加上方法体,即代码块;

    (2)下面直接上代码,具体解析在代码里做了注释

    <meta charset="utf-8">
    <?php
        abstract class aDB{
            // 连接数据库,从配置文件读取配置信息
            abstract public function coon();
            /*发送query查询
            * @param string $sql sql语句
            * @return mixed
            */
            abstract public function query($sql);
            /*查询多行数据
            *@param string $sql sql语句
            * @return array
            */
            abstract public function getAll($sql);
            /*单行数据
            *@param string $sql sql语句
            * @return array
            */
            abstract public function getRow($sql);
            /*查询单个数据,如count(*)
            *@param string $sql sql语句
            * @return mixed
            */
            abstract public function getOne($sql);
            /*自动创建sql并执行,拼接sql语句
            *@param array $data 关键数组 键值与表的列值对应
            *@param string $table表名字
            *@param string act 动作/update/insert
            *@param string where 条件,用于update
            *@return int 新插入的列的主键值或影响行数
            */
            abstract public function Exec($data,$table,$act='insert',$where='0');
            /*返回上一条语句影响的行数
            */
            abstract public function affectedRows();
        }
        class MySQL extends aDb{
            //全局变量
            public $link;
            //构造函数,自动触发连接数据库
            public function __construct(){
                $this->coon();
            }
            //连接数据库,从配置文件读取配置信息(这里我写一个config配置文件)
            public function coon(){
                include './config.php';
                // var_dump($cfg['host']);获取配置信息
                //连接数据库,两种风格对比
                // mysqli_connect();这里是过程化风格,下面是面向对象风格
                $this ->link = new mysqli($cfg['host'],$cfg['user'],$cfg['pwd'],$cfg['db']);//返回连接数据库的版本等信息(常说的连接点)
                $this->query('set name'.$cfg['charset']);//设置字符集
            }
            public function query($sql){
                return $this->link->query($sql);
            }
            public function getAll($sql){
                $data = [];
                $res = $this->query($sql);
                // mysqli_fetch_assoc();过程化风格,下面介绍下面向对象风格fetch_assoc
                while ($row = $res->fetch_assoc()) {
                    $data[] = $row;
                }
                return $data;
            }
            public function getRow($sql){
                //查询单条时,加上where条件即可,例如select* from user where id = 1
                $res = $this->query($sql);
                $row = $res->fetch_row()[0];
                return $row;
            }
            public function getOne($sql){//查询单个数据
                $res = $this->query($sql);
                $row = $res->fetch_row()[0];//查询出数组长度,即数据数量
                return $row;
            }
            //$act='insert/update'控制插入和删除数据
            public function Exec($data,$table,$act='insert',$where='0'){//自动创建sql并执行
                if ($act == 'insert') {
                    //插入语句
                    //insert into 表名(id,name) values('2','tony')过程化风格
                    $sql = 'insert into '.$table .'(';
                    //array_keys()返回包含数组中所有键名的一个新数组
                    $sql.=implode(',',array_keys($data)).')';//将数组拆成字符串,用,分隔
                    // var_dump($sql);    到这步已经可以输出insert into user(name,money),还差values
                    $sql.= " values ('";
                    $sql.= implode("','",array_values($data))."')";//这里通过拼接字符串,插入values(注意单引号的拼接)
                }else{
                    //更新语句****更新和删除操作必须加条件
                    //update xx set name='www',password='12' where ;
                    $sql = "update $table set ";
                    foreach ($data as $key => $value) {
                        $sql.= $key ."='".$value."',";
                    }
                    // var_dump($sql);此时输出结果会多一个,,所以下面来去掉,
                    $sql = rtrim($sql,',');
                    $sql.= " where $where";
                    var_dump($sql);
                }
                return $this->query($sql);
            }
            public function lastId(){//返回新增数据的id,新增数据时触发
                return $this->link->insert_id;
            }
            public function affectedRows(){//影响行数
                return $this->link->affected_rows;
            }
        }
        $mysql = new MySQL();
        var_dump($mysql->Exec(['name'=>'haizwi','password'=>'5601'],'user','update',"name='tony'"));
        var_dump($mysql->affectedRows());
    ?>

    config.php:

    <?php
        $cfg = array(
            'host' => 'localhost',
            'user' => 'root',
            'pwd' => 'root',
            'db' => 'user',
            'charset' => 'utf8'
        );
        return $cfg;
    ?>
  • 相关阅读:
    常见的分布式协议与算法【转】
    Linux的文件系统及文件缓存知识点整理【转】
    linux内核启动内核解压过程分析【转】
    Linux内核分析:Linux内核启动流程分析【转】
    Linux内核Ramdisk(initrd)机制【转】
    基于tiny4412的Linux内核移植 -- 设备树的展开【转】
    linux中RamDisk的三种实现方式【转】
    (十四)Linux kernel mmc 框架说明,包括mmc_test使用方法【转】
    ApplicationContext的初始化与销毁&Bean的生命周期&BeanPostProcessor的使用&Aware使用(四)
    Spring技术与内幕IoC实现(二)
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8652673.html
Copyright © 2020-2023  润新知