ホームページ >バックエンド開発 >PHPの問題 >PHP でデータベースの追加、削除、および変更クラスをカプセル化する方法

PHP でデータベースの追加、削除、および変更クラスをカプセル化する方法

PHPz
PHPzオリジナル
2023-03-22 15:22:411482ブラウズ

Web アプリケーションの開発に伴い、データベース管理の需要もますます高まっています。 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. 概要

データベースの追加、削除、変更をカプセル化するクラスは、Web アプリケーションで完了する必要があるタスクです。データベース操作をクラスにカプセル化することにより、コードの可読性、保守性、セキュリティが向上し、コードの再利用も容易になります。要約すると、カプセル化されたデータベース操作クラスの開発に注意を払う必要があります。

以上がPHP でデータベースの追加、削除、および変更クラスをカプセル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。