在 PHP 中从外部类使用 MySQL
从 PHP 5.6 迁移到 7.0,并进行相应的数据库调整,从 MySql 到 Mysqli 已经揭示了某些挑战。在这里,我们将深入研究根本问题并提供替代解决方案。
理解结构
首先,您设计了一个具有私有属性和构造函数的数据库类建立连接。但是,此设置在从其他类访问时会造成断开连接。
其次,您有一个旨在与数据库交互的 API 类,但它在其构造函数中使用单独的新实例化来进行数据库连接。
错误根源:内部不一致
当您从 API 类引用 $this->db->conn 时,它会检索 null,从而导致内部服务器错误。发生这种情况是因为 $this->db 仅在对象创建时初始化,并且它不保留任何连接数据。
建议的解决方案:依赖注入
相反每个类的单独实例化,请考虑依赖注入。操作方法如下:
通过遵循这些原则,您可以在 PHP 应用程序中跨多个类有效地利用 MySQLi。
示例实现
数据库.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>
这种重组可确保整个应用程序对数据库资源的访问一致,从而减少您遇到的内部服务器错误。
以上是如何在 PHP 中从外部类访问 MySQLi:通过依赖注入克服内部服务器错误的详细内容。更多信息请关注PHP中文网其他相关文章!