So kapseln Sie Klassen zum Hinzufügen, Löschen und Ändern von Datenbanken in PHP

PHPz
Freigeben: 2023-03-22 15:46:02
Original
1461 Leute haben es durchsucht

Mit der Entwicklung von Webanwendungen wird auch der Bedarf an Datenbankmanagement immer höher. Als PHP-Programmierer ist die Optimierung der Vorgänge zum Hinzufügen, Löschen, Ändern und Überprüfen ein Problem, das gelöst werden muss. Dieses Problem kann durch PHP-Klassen gelöst werden, die das Hinzufügen, Löschen und Ändern von Datenbanken kapseln.

1. Warum müssen Sie Datenbankklassen kapseln?

Normalerweise arbeiten wir bei der Durchführung von Datenbankoperationen in der Hauptlogik der Anwendung, z. B. beim Betreiben der Datenbank im Controller. Tatsächlich gibt es bei diesem Ansatz jedoch mehrere offensichtliche Probleme:

  • Coderedundanz: In unserer Anwendung ist es wahrscheinlich, dass mehrere Controller mit der Datenbank arbeiten müssen. Wenn jeder Controller separat Code für Datenbankoperationen schreibt, entsteht viel redundanter Code.

  • Schlechte Lesbarkeit des Codes: In diesem Fall ist auch die Lesbarkeit des Codes schlecht. Es ist sehr wahrscheinlich, dass derselbe Codeabschnitt in mehreren Controllern erscheint, was anderen Entwicklern Probleme bereiten wird.

  • Sicherheitsprobleme: Beim Schreiben von Datenbankbetriebscode direkt in der Anwendung bestehen bestimmte Sicherheitsrisiken. Zum Beispiel Probleme wie SQL-Injection.

Zusammenfassend ist es für uns notwendig, unseren Datenbankbetriebscode zu kapseln und ihn zu einem unabhängigen Modul zu machen. Dieses Modul muss die folgenden Eigenschaften aufweisen:

  • Gute Lesbarkeit

  • Kann die Wiederverwendung von Code erleichtern

  • Gute Skalierbarkeit

  • Fähigkeit, Sicherheitsprobleme effektiv zu lösen

    .

2 . Die Grundidee Kapselung des Hinzufügens, Löschens und Änderns von Klassen in der Datenbank

Angesichts der oben genannten Probleme können wir die Klasse in Form einer PHP-Bibliothek schreiben, um die Wiederverwendung der Klasse zu erleichtern. Die Grundidee der Kapselung von Klassen zum Hinzufügen, Löschen und Ändern von Datenbanken lautet wie folgt:

  • Kapseln Sie alle Datenbankoperationen in einer Klasse, z. B. der sogenannten DB-Klasse.

  • Schreiben Sie eine allgemeine Methode zum Implementieren von Vorgängen zum Hinzufügen, Löschen, Ändern und Abfragen von Datenbanken.

  • Implementieren Sie parametrisierte Abfragen in Methoden, um Sicherheitsprobleme wie SQL-Injection effektiv zu vermeiden.

  • Erfassen Sie alle Fehlerinformationen, kapseln Sie sie in eine einheitliche Ausnahme und werfen Sie sie an den Code der oberen Ebene.

Das Folgende ist die Implementierung einer einfachen Datenbankklasse:

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() {
    // 实现删除方法
  }
}
Nach dem Login kopieren

3. Verwenden Sie gekapselte Klassen

Wenn wir die Datenbank hinzufügen, löschen, ändern und abfragen müssen, müssen wir nur die Datenbankklasse einführen und dann instanziieren. Zum Beispiel:

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();
Nach dem Login kopieren

4. Zusammenfassung

Die Klasse, die das Hinzufügen, Löschen und Ändern der Datenbank kapselt, ist eine Aufgabe, die wir in Webanwendungen ausführen müssen. Durch die Kapselung von Datenbankoperationen in einer Klasse können die Lesbarkeit, Wartbarkeit und Sicherheit des Codes verbessert und auch die Wiederverwendung von Code erleichtert werden. Zusammenfassend sollten wir der Entwicklung gekapselter Datenbankbetriebsklassen Aufmerksamkeit schenken.

Das obige ist der detaillierte Inhalt vonSo kapseln Sie Klassen zum Hinzufügen, Löschen und Ändern von Datenbanken in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage