[php]{项目} UpWork - 三、DBUtils类

前言

WorkInfo类要干的事比我想的还要多,所以先更新相对简单的DBUtils类了,DBUtils类是整个项目处理数据库操作的一个工具类,需要访问、操作数据库时只需要传入SQL语句等参数即可,避免了每次访问数据库都需要重复的写创建pdo对象和获取结果的代码。

设计

DBUtils类是用来连接和访问数据库的工具类,主要的功能是:

  1. 创建pdo对象

  2. 查询数据库并返回结果

因此DBUtils会有一个成员变量和三个基本方法:

  • $pdo 存放pdo对象
  • __construct 实例化时构造pdo对象
  • myQuery 自定义的查询方法
  • myExecute 自定义的执行方法

Coding

先看构造方法:

/**
 * DBUtils constructor.
 * @param string $dbHost
 * @param string $dbUsername
 * @param string $dbPassword
 */
function __construct($dbHost="yeek.top", $dbUsername="moreant", $dbPassword="moreant")
{
    $dsn = "mysql:host=$dbHost;dbname=yeek;charset=utf8";
    try {
        $pdo = new PDO($dsn, $dbUsername, $dbPassword);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        exit("连接出错" . $e->getMessage());
    }
    $this->pdo = $pdo;
}

传入的三个参数主要都是用来实例化PDO类,我都指定了默认值,作用如下:

  • new PDO() 返回的是yeek.top中morean用户的PDO对象
  • new PDO(“localhost”) 返回的是localhost中morean用户的PDO对象
  • new PDO(“localhost”,“root”,“password”) 返回的是localhost中root用户的PDO对象

自定义查询方法:

/**
 * 自定义(方便的)查询方法
 * @param $sql string 查询语句
 * @param null $array 传入参数
 * @param bool $all 获取最后一个结果还是所有结果
 * @return array|null 成功返回数组,失败返回null
 */
function myQuery($sql, $array=null, $all=true)
{
    $pdo = $this->pdo;
    $pdoS = $pdo->prepare($sql);
    $execute = $pdoS->execute($array);
    if($execute){
        if($all){
            return $pdoS->fetchAll();
        }else{
            return $pdoS->fetch();
        }
    }else{
        echo "查询失败";
    }
    return null;
}

查询方法用的是PDOStatement的prepare+execute方法,好处就是可以绑定SQL语句中的参数,在execute方法中传入绑定参数的数组即可

execute方法介绍

未来可能只需要返回查询结果中的第一个,所以加入了if来判断。

最后是myExecute方法

function myExecute($sql, $array=null){
    $pdo = $this->pdo;
    $pdoS = $pdo->prepare($sql);
    $execute = $pdoS->execute($array);
    if($execute){
            return $pdoS->rowCount();
    }else{
        echo "查询失败";
    }
    return null;
}

因为在处理Update、Insert、Delect中execute的到的结果并不是数组(fetch结果为空)只能用rowCount来得到影响的行数。

调用例子

$dp = new DButils();
$sql = "SELECT * FROM student WHERE class=:class AND sex=:sex";
$array=[
    'class' = "3",
    'sex'="男",
];
$result = $db->myQuery($sql,$array);

$result就是查询返回的结果了。

后言

本章是DBUtils类,下一章是Work类(模型)(前称WorkInfo),之后再说workManage.php(视图)。

讲完这三个对于UpWork的作业管理就基本讲完了。

先给你们看一下成品

在这里插入图片描述

成品预览

对应的源码

我是Moreant,下一节Work类见~


版权声明:本文为weixin_43145371原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。