Home  >  Article  >  Backend Development  >  How to Access MySQLi from External Classes in PHP: Overcoming Internal Server Errors with Dependency Injection

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

DDD
DDDOriginal
2024-10-28 14:32:02715browse

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

Utilizing MyISQL from External Classes in PHP

Your migration from PHP 5.6 to 7.0 with the corresponding database adjustment from MySql to Mysqli has unveiled certain challenges. Here we'll delve into the underlying issues and provide alternative solutions.

Understanding the Structure

Firstly, you have devised a database class with private properties and a constructor to establish a connection. However, this setup creates a disconnect when accessed from other classes.

Secondly, you have an API class designed to interact with the database, but it utilizes a separate new instantiation for database connection within its constructor.

Root of the Error: InternalInconsistencies

When you reference $this->db->conn from the API class, it retrieves null, resulting in an internal server error. This occurs because $this->db is only initialized upon object creation, and it doesn't retain any connection data.

Proposed Solution: Dependency Injection

Instead of separate instantiation for each class, consider dependency injection. Here's how:

  1. Create a standalone database class with the necessary connection setup code.
  2. Pass an instance of this database object as a constructor parameter to any class that requires database access.

By embracing these principles, you can effectively leverage MySQLi across multiple classes within your PHP application.

Example Implementation

database.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>

This restructuring ensures consistent access to database resources throughout your application, mitigating the internal server errors you encountered.

The above is the detailed content of How to Access MySQLi from External Classes in PHP: Overcoming Internal Server Errors with Dependency Injection. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn