PHP에서 데이터베이스 추가, 삭제 및 수정 클래스를 캡슐화하는 방법

PHPz
풀어 주다: 2023-03-22 15:46:02
원래의
1462명이 탐색했습니다.

웹 애플리케이션의 발전에 따라 데이터베이스 관리에 대한 수요도 점점 높아지고 있습니다. PHP 프로그래머로서 추가, 삭제, 수정, 확인 작업을 어떻게 최적화할 것인지는 반드시 해결해야 할 문제입니다. 이 문제는 데이터베이스 추가, 삭제 및 수정을 캡슐화하는 PHP 클래스를 사용하여 해결할 수 있습니다.

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();
로그인 후 복사

4. 요약

데이터베이스의 추가, 삭제 및 수정을 캡슐화하는 클래스는 웹 애플리케이션에서 완료해야 하는 작업입니다. 데이터베이스 작업을 클래스로 캡슐화하면 코드의 가독성, 유지 관리성 및 보안이 향상될 수 있으며 코드 재사용도 촉진될 수 있습니다. 요약하자면, 우리는 캡슐화된 데이터베이스 작업 클래스 개발에 주의를 기울여야 합니다.

위 내용은 PHP에서 데이터베이스 추가, 삭제 및 수정 클래스를 캡슐화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿