php如何封装数据库增删改的类

本文小编为大家详细介绍“php如何封装数据库增删改的类”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何封装数据库增删改的类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

创新互联建站于2013年创立,是专业互联网技术服务公司,拥有项目成都网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元尼玛做网站,已为上家服务,为尼玛各地企业和个人服务,联系电话:18980820575

1.为什么需要封装数据库类?

通常情况下,在进行数据库操作时,我们会在应用程序的主要逻辑中进行操作,比如在控制器中操作数据库。但实际上,这种方式存在几个明显的问题:

  • 代码冗余:在我们的应用程序中,很可能多个控制器需要对数据库进行操作。如果每个控制器都单独编写数据库操作的代码,那么就会出现大量的冗余代码。

  • 代码可读性差:这种情况下,代码的可读性也就差了。很可能我们同一段代码就出现在多个控制器中,这样一来,就会给其他开发人员带来困扰。

  • 安全问题:将数据库操作代码直接写在应用程序中,存在一定的安全风险。比如sql注入等问题。

综上所述,我们有必要将我们的数据库操作代码封装起来,让它们成为一个独立的模块。这个模块需要具有以下几个特点:

  • 具有良好的可读性

  • 能够方便的进行代码复用

  • 具有良好的扩展性

  • 能够有效的解决安全问题

2.封装数据库增删改类的基本思路

针对上面提到的问题,我们可以把类写成php库的形式,以便实现类的复用。封装数据库增删改类的基本思路如下:

  • 将所有的数据库操作都封装在一个类中,比如叫做db类。

  • 编写通用的方法来实现数据库增删改查操作。

  • 在方法中实现参数化查询,从而有效的避免sql注入等安全问题。

  • 将所有的错误信息都捕获,并且封装成一个统一的异常抛出给上层代码。

下面是一个简单的db类的实现:

class db {
  private $db_host;
  private $db_user;
  private $db_pass;
  private $db_name;
  private $conn;
  function __construct($db_host, $db_user, $db_pass, $db_name) {
    $this->db_host = $db_host;
    $this->db_user = $db_user;
    $this->db_pass = $db_pass;
    $this->db_name = $db_name;
  }
  // 数据库连接方法
  function connect() {
    $this->conn = MySQLi_connect($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
    if (!$this->conn) {
      throw new Exception('数据库连接失败');
    }
    mysqli_query($this->conn, "SET NAMES 'utf8'");
  }
  // 数据库关闭方法
  function close() {
    mysqli_close($this->conn);
  }
  // 查询方法,参数化查询
  function query($sql, $params) {
    $stmt = mysqli_prepare($this->conn, $sql);
    if (!$stmt) {
      throw new Exception('query error: '.mysqli_error($this->conn));
    }
    if (count($params) > 0) {
      call_user_func_array('mysqli_stmt_bind_param', array_merge(array($stmt, str_repeat('s', count($params))), $params));
    }
    $result = mysqli_stmt_execute($stmt);
    if (!$result) {
      throw new Exception('query error: '.mysqli_stmt_error($stmt));
    }
    $rows = array();
    $meta = mysqli_stmt_result_metadata($stmt);
    if ($meta) {
      while ($field = mysqli_fetch_field($meta)) {
        $params[] = &$row[$field->name];
      }
      call_user_func_array(array($stmt, 'bind_result'), $params);
      while (mysqli_stmt_fetch($stmt)) {
        $rows[] = $row;
      }
    }
    mysqli_stmt_close($stmt);
    return $rows;
  }
  // 增加方法,参数化查询
  function insert($table, $data) {
    $sql = 'INSERT INTO '.$table.' ('.implode(',', array_keys($data)).') VALUES ('.implode(',', array_fill(0, count($data), '?')).')';
    $result = $this->query($sql, array_values($data));
    return mysqli_affected_rows($this->conn);
  }
  // 更新方法
  function update() {
    // 实现更新方法
  }
  // 删除方法
  function delete() {
    // 实现删除方法
  }
}

3.使用封装好的类

当我们需要对数据库进行增删改查时,只需要引入db类,然后实例化即可。比如:

require_once 'db.php';
$db = new db('localhost', 'root', 'root', 'test');
$db->connect();
$sql = 'INSERT INTO `user`(`name`, `age`) VALUES (?, ?)';
$data = array('Tom', '18');
$db->query($sql, $data);
$db->close();

读到这里,这篇“php如何封装数据库增删改的类”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联行业资讯频道。


当前标题:php如何封装数据库增删改的类
浏览路径:http://myzitong.com/article/gpephj.html