Maison >développement back-end >tutoriel php >POO du monde réel avec PHP et MySQL

POO du monde réel avec PHP et MySQL

王林
王林original
2023-08-26 19:45:20809parcourir

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

De nombreux exemples, des robots aux vélos, servent d'explications faciles de la POO. Cependant, je préfère démontrer comment la POO fonctionne dans des scénarios réels, en particulier pour les programmeurs. Un exemple pratique consiste à créer des classes MySQL CRUD (Create, Read, Update et Delete). De cette façon, les programmeurs peuvent gérer efficacement les entrées d'un projet, quelle que soit la conception de la base de données.

Une fois que nous avons déterminé les exigences, créer la structure de base de la classe est relativement simple. Tout d’abord, nous devons nous assurer que nous pouvons effectuer des opérations MySQL de base. Pour y parvenir, nous devons implémenter les fonctions suivantes :

  • Choisissez
  • Insérer
  • Supprimer
  • Mise à jour
  • connecter
  • Déconnecter

Jetons un rapide coup d'œil à ce à quoi ressemble notre définition de classe :

<?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() {}
}

En gros, c’est un programme appelé Database 的骨架类,它代表数据库连接并提供与数据库交互的方法。我们定义了不同的私有属性,例如 $db_host$db_user$db_pass$db_name$con. Cette classe est utilisée pour stocker les détails de connexion à la base de données et l'objet de connexion lui-même.

Dans la section suivante, nous détaillerons la mise en œuvre réelle de cette classe.

Implémenter une classe de base de données

Dans cette section, nous mettrons en œuvre les méthodes nécessaires pour effectuer différentes opérations de base de données.

connect Méthode

Allez-y et ajoutez la méthode connect comme indiqué dans l'extrait de code suivant.

<?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;
    }
}
Le but de la méthode

connect 方法的目的是使用 mysqli 扩展建立与 MySQL 数据库的连接。首先,我们检查是否已经存在与数据库的连接,如果存在,该方法只是返回 true 表示连接已经建立,无需重新连接。如果没有连接,它会尝试使用 mysqli_connect est d'établir une connexion à une base de données MySQL à l'aide de l'extension mysqli. Tout d'abord, nous vérifions s'il existe déjà une connexion à la base de données. Si elle existe, la méthode renvoie simplement true indiquant que la connexion a été établie et qu'il n'est pas nécessaire de se reconnecter. S'il n'y a pas de connexion, il tente de se connecter à la base de données à l'aide de la fonction mysqli_connect.

Une fois la connexion à la base de données réussie, elle sera appelée mysqli_select_db函数来选择数据库。最后如果数据库选择成功,则返回true,表示连接建立,数据库选择。如果连接或数据库选择失败,则返回 false.

disconnect Méthode

Jetons un coup d'œil à la méthode disconnect.

<?php

public function disconnect() 
{
    if ($this->con) {
        if (mysqli_close($this->con)) {
            $this->con = false; 
            return true;
        } else {
            return false;
        }
    }
}
Il vérifie s'il existe une connexion à la base de données active et si c'est le cas, utilise mysqli_close() 函数关闭连接,并将 $this->con 属性设置为 false.

select Méthode

C'est l'une des méthodes les plus importantes et les plus fréquemment utilisées. Tout d'abord, nous créons la méthode tableExists qui vérifie si la table existe dans la base de données MySQL.

<?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;
        }
    }
}

Ensuite, nous continuons à mettre en œuvre la méthode select.

<?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;
    }
}

Il est utilisé pour récupérer des enregistrements de la base de données. Il crée d'abord une chaîne de requête SQL à l'aide des paramètres d'entrée. Il vérifie si la table spécifiée existe dans la base de données et, si c'est le cas, exécute la requête. Si la requête réussit, les lignes de résultats sont récupérées et renvoyées sous forme de tableau associatif. Si la requête échoue, la méthode renvoie false。如果数据库中不存在指定的表,也返回false.

insert Méthode

Jetons un coup d'œil à la méthode insert comme indiqué dans l'extrait de code suivant.

<?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;
        }
    }
}

Il est utilisé pour insérer des données dans une table de base de données MySQL à l'aide de l'extension mysqli. Cette fonction prend trois paramètres : le nom de la table, la valeur à insérer et (facultatif) la colonne à insérer. Tout d'abord, il vérifie si la table spécifiée existe dans la base de données et, si tel est le cas, construit une requête SQL pour insérer des données en utilisant les valeurs et les colonnes fournies. Nous utilisons la fonction mysqli_real_escape_string pour nettoyer n'importe quelle valeur de chaîne.

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

delete Méthode

Jetons un coup d'œil rapide aux méthodes delete.

<?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; 
    }
}

Il est utilisé pour supprimer une table ou des lignes de la base de données.

update Méthode

C'est également l'un des moyens importants pour nous de mettre à jour les informations de la base de données.

update La mise en œuvre de la méthode devrait ressembler à ceci.

<?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;
    }
}
La méthode

update 方法具有三个参数:$table$rows$where。然后解析 $where 数组以生成用于更新查询的 SQL WHERE 子句。解析 $rows 数组以生成用于更新查询的 SQL SET 子句。数组键表示列名称,而数组值表示列的新值。我们使用 mysqli_real_escape_string a trois paramètres : $table, $rows et $where. Le tableau $where est ensuite analysé pour générer la clause SQL WHERE pour la requête de mise à jour. Analyse le tableau $rows pour générer la clause SQL SET pour la requête de mise à jour. Les clés du tableau représentent les noms des colonnes et les valeurs du tableau représentent les nouvelles valeurs des colonnes. Nous utilisons la fonction

pour nettoyer n'importe quelle valeur de chaîne. 🎜

至此,我们完成了数据库操作所需方法的创建。您可以将其另存为 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`)
);

它应该在您的数据库中创建 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.";
}
?>

首先,我们创建了一个新的 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.";
}
?>

如您所见,我们调用了 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.";
}
?>

它应该删除 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.";
}
?>

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

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

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