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