Maison  >  Article  >  développement back-end  >  Comment encapsuler des classes d'ajout, de suppression et de modification de base de données en PHP

Comment encapsuler des classes d'ajout, de suppression et de modification de base de données en PHP

PHPz
PHPzoriginal
2023-03-22 15:22:411463parcourir

Avec le développement des applications Web, la demande en matière de gestion de bases de données devient également de plus en plus élevée. En tant que programmeur PHP, comment optimiser les opérations d'ajout, de suppression, de modification et de vérification est un problème qui doit être résolu. Ce problème peut être résolu en utilisant des classes PHP qui encapsulent les ajouts, suppressions et modifications de bases de données.

1. Pourquoi avez-vous besoin d'encapsuler les classes de base de données ?

Normalement, lors de l'exécution d'opérations de base de données, nous opérerons dans la logique principale de l'application, comme l'exploitation de la base de données dans le contrôleur. Mais en fait, cette approche présente plusieurs problèmes évidents :

  • Redondance du code : dans notre application, il est probable que plusieurs contrôleurs doivent fonctionner sur la base de données. Si chaque contrôleur écrit séparément le code pour les opérations de base de données, il y aura beaucoup de code redondant.

  • Mauvaise lisibilité du code : Dans ce cas, la lisibilité du code est également mauvaise. Il est très probable que le même morceau de code apparaisse dans plusieurs contrôleurs, ce qui causera des problèmes aux autres développeurs.

  • Problèmes de sécurité : il existe certains risques de sécurité lors de l'écriture du code d'opération de base de données directement dans l'application. Par exemple, des problèmes tels que l'injection SQL.

Pour résumer, il nous faut encapsuler le code de fonctionnement de notre base de données et en faire un module indépendant. Ce module doit avoir les caractéristiques suivantes :

  • Bonne lisibilité

  • Capable de faciliter la réutilisation du code

  • Bonne évolutivité

  • Capable de résoudre efficacement les problèmes de sécurité

2. L'idée de base d'encapsuler l'ajout, la suppression et la modification de classes dans la base de données

Au vu des problèmes évoqués ci-dessus, on peut écrire la classe sous la forme d'une bibliothèque php pour faciliter la réutilisation de la classe. L'idée de base de l'encapsulation des classes d'ajout, de suppression et de modification de base de données est la suivante :

  • Encapsuler toutes les opérations de base de données dans une classe, telle que la classe db.

  • Écrivez une méthode commune pour implémenter les opérations d'ajout, de suppression, de modification et de requête de base de données.

  • Implémentez des requêtes paramétrées dans les méthodes pour éviter efficacement les problèmes de sécurité tels que l'injection SQL.

  • Capturez toutes les informations d'erreur, encapsulez-les dans une exception unifiée et envoyez-les au code de la couche supérieure.

Ce qui suit est l'implémentation d'une classe db simple :

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 Utiliser des classes encapsulées

Lorsque nous devons ajouter, supprimer, modifier et interroger la base de données, il nous suffit d'introduire la classe db. puis instanciez-le. Par exemple :

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. Résumé

Les classes qui encapsulent les ajouts, suppressions et modifications de bases de données sont des tâches que nous devons effectuer dans les applications Web. En encapsulant les opérations de base de données dans une classe, la lisibilité, la maintenabilité et la sécurité du code peuvent être améliorées, et la réutilisation du code peut également être facilitée. En résumé, nous devons prêter attention au développement de classes d'opérations de bases de données encapsulées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn