Maison  >  Article  >  développement back-end  >  Comment accéder à MySQLi à partir de classes externes en PHP : surmonter les erreurs internes du serveur grâce à l'injection de dépendances

Comment accéder à MySQLi à partir de classes externes en PHP : surmonter les erreurs internes du serveur grâce à l'injection de dépendances

DDD
DDDoriginal
2024-10-28 14:32:02715parcourir

How to Access MySQLi from External Classes in PHP: Overcoming Internal Server Errors with Dependency Injection

Utiliser MyISQL à partir de classes externes en PHP

Votre migration de PHP 5.6 vers 7.0 avec l'ajustement correspondant de la base de données de MySql vers Mysqli a dévoilé certains défis. Ici, nous allons approfondir les problèmes sous-jacents et proposer des solutions alternatives.

Comprendre la structure

Tout d'abord, vous avez conçu une classe de base de données avec des propriétés privées et un constructeur pour établir une connexion. Cependant, cette configuration crée une déconnexion lors de l'accès à partir d'autres classes.

Deuxièmement, vous disposez d'une classe API conçue pour interagir avec la base de données, mais elle utilise une nouvelle instanciation distincte pour la connexion à la base de données au sein de son constructeur.

Racine de l'erreur : InternalInconsistencies

Lorsque vous faites référence à $this->db->conn à partir de la classe API, il récupère null, ce qui entraîne une erreur interne du serveur. Cela se produit car $this->db n'est initialisé qu'à la création de l'objet et ne conserve aucune donnée de connexion.

Solution proposée : injection de dépendances

À la place d'instanciation séparée pour chaque classe, envisagez l'injection de dépendances. Voici comment :

  1. Créez une classe de base de données autonome avec le code de configuration de connexion nécessaire.
  2. Transmettez une instance de cet objet de base de données en tant que paramètre de constructeur à toute classe nécessitant un accès à la base de données.

En adoptant ces principes, vous pouvez exploiter efficacement MySQLi dans plusieurs classes au sein de votre application PHP.

Exemple de mise en œuvre

base de données .php :

<code class="php">$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB");
$db->set_charset('utf8mb4');</code>

myapi.php :

<code class="php">class MyAPI {
    protected $db;
    
    public function __construct($db) {
        $this->db = $db;
    }
    
    // ... Rest of your code
}</code>

app.php :

<code class="php">require 'database.php';
require 'myapi.php';

$api = new MyAPI($db);
// Utilize the API as intended</code>

Cette restructuration garantit un accès cohérent aux ressources de base de données dans toute votre application, atténuant ainsi les erreurs de serveur internes que vous avez rencontré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