Reales OOP mit PHP und MySQL

王林
Freigeben: 2023-08-26 19:48:01
Original
759 Leute haben es durchsucht

使用 PHP 和 MySQL 进行真实世界的 OOP

Viele Beispiele von Robotern bis zu Fahrrädern dienen als einfacheErklärungen von OOP. Allerdings bevorzuge ich es, zu demonstrieren, wie OOP in realen Szenarien funktioniert, insbesondere für Programmierer. Ein praktisches Beispiel ist die Erstellung von MySQL CRUD-Klassen (Create, Read, Update und Delete). Auf diese Weise können Programmierer unabhängig vom Design der Datenbank Einträge in einem Projekt effektiv verwalten.

Sobald wir die Anforderungen ermittelt haben, ist die Erstellung der Grundstruktur des Kurses relativ einfach. Zunächst müssen wir sicherstellen, dass wir grundlegende MySQL-Operationen ausführen können. Um dies zu erreichen, müssen wir die folgenden Funktionen implementieren:

  • Wählen
  • Einfügen
  • Löschen
  • Update
  • verbinden
  • Trennen

Werfen wir einen kurzen Blick darauf, wie unsere Klassendefinition aussieht:

<?php
class Database 
{
    private $db_host = '';
    private $db_user = '';
    private $db_pass = '';
    private $db_name = '';
    private $con = '';
    
    public function __contruct($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;
    }

    public function connect() {}
    public function disconnect() {}
    public function select() {}
    public function insert() {}
    public function delete() {}
    public function update() {}
}
Nach dem Login kopieren

Im Grunde handelt es sich um ein Programm namens Database 的骨架类,它代表数据库连接并提供与数据库交互的方法。我们定义了不同的私有属性,例如 $db_host$db_user$db_pass$db_name$con. Diese Klasse wird zum Speichern von Datenbankverbindungsdetails und des Verbindungsobjekts selbst verwendet.

Im nächsten Abschnitt werden wir die tatsächliche Implementierung dieser Klasse detailliert beschreiben.

Datenbankklasse implementieren

In diesem Abschnitt implementieren wir die Methoden, die zum Ausführen verschiedener Datenbankoperationen erforderlich sind.

connect Methode

Fahren Sie fort und fügen Sie die connect-Methode hinzu, wie im folgenden Codeausschnitt gezeigt.

<?php

public function connect()
{
    if (!$this->con) {
        $this->con = mysqli_connect($this->db_host, $this->db_user, $this->db_pass);

        if($this->con) {
            $seldb = mysqli_select_db($this->con, $this->db_name);

            if($seldb) {
                return true; 
            } else {
                return false;
            }
        } else {
            return false;
        }
    } else {
        return true;
    }
}
Nach dem Login kopieren
Der Zweck der

connect 方法的目的是使用 mysqli 扩展建立与 MySQL 数据库的连接。首先,我们检查是否已经存在与数据库的连接,如果存在,该方法只是返回 true 表示连接已经建立,无需重新连接。如果没有连接,它会尝试使用 mysqli_connect-Methode besteht darin, mithilfe der mysqli-Erweiterung eine Verbindung zu einer MySQL-Datenbank herzustellen. Zuerst prüfen wir, ob bereits eine Verbindung zur Datenbank besteht. Wenn eine Verbindung besteht, gibt die Methode lediglich true zurück, was bedeutet, dass die Verbindung hergestellt wurde und keine erneute Verbindung erforderlich ist. Wenn keine Verbindung besteht, wird versucht, mithilfe der Funktion mysqli_connect eine Verbindung zur Datenbank herzustellen.

Sobald die Datenbankverbindung erfolgreich ist, wird sie aufgerufen mysqli_select_db函数来选择数据库。最后如果数据库选择成功,则返回true,表示连接建立,数据库选择。如果连接或数据库选择失败,则返回 false.

disconnect Methode

Werfen wir einen Blick auf die disconnect-Methode.

<?php

public function disconnect() 
{
    if ($this->con) {
        if (mysqli_close($this->con)) {
            $this->con = false; 
            return true;
        } else {
            return false;
        }
    }
}
Nach dem Login kopieren
Es prüft, ob eine aktive Datenbankverbindung besteht und verwendet in diesem Fall mysqli_close() 函数关闭连接,并将 $this->con 属性设置为 false.

select Methode

Dies ist eine der wichtigsten und am häufigsten verwendeten Methoden. Zuerst erstellen wir die tableExists-Methode, die prüft, ob die Tabelle in der MySQL-Datenbank vorhanden ist.

<?php

private function tableExists($table) 
{
    $tablesInDb = mysqli_query($this->con, 'SHOW TABLES FROM '.$this->db_name.' LIKE "'.$table.'"');

    if($tablesInDb) {
        if(mysqli_num_rows($tablesInDb) == 1) {
            return true;
        } else {
            return false;
        }
    }
}
Nach dem Login kopieren

Als nächstes implementieren wir weiterhin die select-Methode.

<?php

public function select($table, $rows = '*', $where = null, $order = null) 
{
    $q = 'SELECT '.$rows.' FROM '.$table;

    if($where != null)
        $q .= ' WHERE '.$where;

    if($order != null)
        $q .= ' ORDER BY '.$order;

    if($this->tableExists($table)) {
        $result = $this->con->query($q);

        if($result) {
            $arrResult = $result->fetch_all(MYSQLI_ASSOC);

            return $arrResult;
        } else {
            return false;
        }
    } else {
        return false;
    }
}
Nach dem Login kopieren

Es wird zum Abrufen von Datensätzen aus der Datenbank verwendet. Zunächst wird mithilfe der Eingabeparameter eine SQL-Abfragezeichenfolge erstellt. Es prüft, ob die angegebene Tabelle in der Datenbank vorhanden ist und führt gegebenenfalls die Abfrage aus. Wenn die Abfrage erfolgreich ist, werden die Ergebniszeilen abgerufen und als assoziatives Array zurückgegeben. Wenn die Abfrage fehlschlägt, gibt die Methode false。如果数据库中不存在指定的表,也返回false zurück.

insert Methode

Werfen wir einen Blick auf die insert-Methode, wie im folgenden Codeausschnitt gezeigt.

<?php

public function insert($table, $values, $rows = null)
{
    if ($this->tableExists($table)) {
        $insert = 'INSERT INTO '.$table;

        if ($rows != null) {
            $insert .= ' ('.$rows.')';
        }

        for ($i = 0; $i < count($values); $i++) {
            $values[$i] = mysqli_real_escape_string($this->con, $values[$i]);

            if (is_string($values[$i])) {
                $values[$i] = '"'.$values[$i].'"';
            }
        }

        $values = implode(',', $values);
        $insert .= ' VALUES ('.$values.')';
        $ins = mysqli_query($this->con, $insert);

        if ($ins) {
            return true;
        } else {
            return false;
        }
    }
}
Nach dem Login kopieren

Es wird verwendet, um Daten mithilfe der MySQL-Erweiterung in eine Tabelle einer MySQL-Datenbank einzufügen. Diese Funktion benötigt drei Parameter: den Tabellennamen, den einzufügenden Wert und (optional) die einzufügende Spalte. Zunächst wird geprüft, ob die angegebene Tabelle in der Datenbank vorhanden ist, und wenn ja, wird eine SQL-Abfrage erstellt, um Daten mithilfe der bereitgestellten Werte und Spalten einzufügen. Wir verwenden die Funktion mysqli_real_escape_string, um beliebige Zeichenfolgenwerte zu bereinigen.

Zuletzt verwendenmysqli_query()函数执行查询,如果查询成功,该函数返回true,否则返回false.

delete Methode

Werfen wir einen kurzen Blick auf die delete Methoden.

<?php

public function delete($table, $where = null)
{
    if ($this->tableExists($table)) {
        if ($where == null) {
            $delete = 'DELETE '.$table; 
        } else {
            $delete = 'DELETE FROM '.$table.' WHERE '.$where; 
        }

        $del = $this->con->query($delete);

        if ($del) {
            return true; 
        } else {
           return false; 
        }
    } else {
        return false; 
    }
}
Nach dem Login kopieren

Es wird verwendet, um Tabellen oder Zeilen aus der Datenbank zu löschen.

update Methode

Dies ist für uns auch eine der wichtigen Möglichkeiten, Datenbankinformationen zu aktualisieren.

update Die Methodenimplementierung sollte so aussehen.

<?php

public function update($table, $rows, $where)
{
    if ($this->tableExists($table)) {
        // Parse the where values
        // even values (including 0) contain the where rows
        // odd values contain the clauses for the row
        for ($i = 0; $i < count($where); $i++) {
            if ($i % 2 != 0) {
                if (is_string($where[$i])) {
                    if (($i + 1) != null) {
                        $where[$i] = '"' . $where[$i] . '" AND ';
                    } else {
                        $where[$i] = '"' . $where[$i] . '"';
                    }
                }
            }
        }

        $where = implode('=', $where);
        
        $update = 'UPDATE ' . $table . ' SET ';
        $keys = array_keys($rows);
        
        $setValues = [];
        foreach ($keys as $key) {
            $value = $rows[$key];
            $setValues[] = "`$key` = '" . mysqli_real_escape_string($this->con, $value)."'";
        }
        
        $update .= implode(',', $setValues);
        $update .= ' WHERE ' . $where;
        
        $query = $this->con->query($update);
        
        if ($query) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}
Nach dem Login kopieren
Die

update 方法具有三个参数:$table$rows$where。然后解析 $where 数组以生成用于更新查询的 SQL WHERE 子句。解析 $rows 数组以生成用于更新查询的 SQL SET 子句。数组键表示列名称,而数组值表示列的新值。我们使用 mysqli_real_escape_string-Methode hat drei Parameter: $table, $rows und $where. Das Array $where wird dann analysiert, um die SQL-Klausel WHERE für die Aktualisierungsabfrage zu generieren. Analysiert das Array $rows, um die SQL-Klausel SET für die Aktualisierungsabfrage zu generieren. Die Array-Schlüssel repräsentieren die Spaltennamen und die Array-Werte repräsentieren die neuen Werte der Spalten. Wir verwenden die Funktion

, um beliebige Zeichenfolgenwerte zu bereinigen. 🎜

至此,我们完成了数据库操作所需方法的创建。您可以将其另存为 Database.php 文件。

在下一节中,我们将了解如何使用它。

如何使用数据库

首先,我们在数据库中创建一个 MySQL 表,以便我们可以测试该表上的 CRUD 操作。

继续运行以下 SQL 来创建表。

CREATE TABLE `mysqlcrud` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) NOT NULL,
	`email` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`id`)
);
Nach dem Login kopieren

它应该在您的数据库中创建 mysqlcrud 表。

如何插入新行

让我们看看如何插入新行。

<?php
require "Database.php";

$db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME");

if ($db->connect()) {
    $db->insert('mysqlcrud', array(1,"Foo Bar","foobar@yahoo.com"));
} else {
    echo "There was some error connecting to the database.";
}
?>
Nach dem Login kopieren

首先,我们创建了一个新的 Database 对象,并将数据库凭据作为参数传递。您需要将其替换为您的凭据。接下来调用Database类的connect方法来建立与数据库的连接。如果连接成功,则调用 insert 方法,并将表名作为第一个参数,将新行的值数组作为第二个参数。

如果一切顺利,它应该在 mysqlcrud 表中创建一个新行。

如何更新行

让我们看看更新操作是如何工作的。

<?php
require "Database.php";

$db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME");

if ($db->connect()) {
    $db->update('mysqlcrud',array('name'=>'Updated Foo Bar'), array('id',1));
} else {
    echo "There was some error connecting to the database.";
}
?>
Nach dem Login kopieren

如您所见,我们调用了 update 方法来更新该行的 name 列。

如何删除行

接下来,让我们看看如何删除特定行。

<?php
require "Database.php";

$db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME");

if ($db->connect()) {
    $db->delete('mysqlcrud', "`id` = '1'");
} else {
    echo "There was some error connecting to the database.";
}
?>
Nach dem Login kopieren

它应该删除 id 等于 1 的行。

如何检索记录

让我们看看如何从表中检索所有记录。

<?php
require "Database.php";

$db = new Database("DB_HOST", "DB_USER", "DB_PASS", "DB_NAME");

if ($db->connect()) {
    $rows = $db->select('mysqlcrud');
} else {
    echo "There was some error connecting to the database.";
}
?>
Nach dem Login kopieren

如您所见,select 方法允许我们从所需的表中获取所有记录。

这就是您如何使用我们的类执行 CRUD 操作。

Das obige ist der detaillierte Inhalt vonReales OOP mit PHP und MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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