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 :
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!