Cara Mengakses MySQLi daripada Kelas Luaran dalam PHP: Mengatasi Ralat Pelayan Dalaman dengan Suntikan Ketergantungan

DDD
Lepaskan: 2024-10-28 14:32:02
asal
797 orang telah melayarinya

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

Menggunakan MyISQL daripada Kelas Luaran dalam PHP

Penghijrahan anda daripada PHP 5.6 ke 7.0 dengan pelarasan pangkalan data yang sepadan daripada MySql ke Mysqli telah mendedahkan tertentu cabaran. Di sini kita akan menyelidiki isu asas dan menyediakan penyelesaian alternatif.

Memahami Struktur

Pertama sekali, anda telah mencipta kelas pangkalan data dengan sifat peribadi dan pembina untuk mewujudkan sambungan. Walau bagaimanapun, persediaan ini mencipta pemutusan sambungan apabila diakses daripada kelas lain.

Kedua, anda mempunyai kelas API yang direka bentuk untuk berinteraksi dengan pangkalan data, tetapi ia menggunakan instantiasi baharu yang berasingan untuk sambungan pangkalan data dalam pembinanya.

Akar Ralat: Ketidakkonsistenan Dalaman

Apabila anda merujuk $this->db->conn daripada kelas API, ia mendapatkan semula null, mengakibatkan ralat pelayan dalaman. Ini berlaku kerana $this->db hanya dimulakan apabila objek dibuat dan ia tidak mengekalkan sebarang data sambungan.

Penyelesaian Cadangan: Suntikan Ketergantungan

Sebaliknya instantiasi berasingan untuk setiap kelas, pertimbangkan suntikan kebergantungan. Begini caranya:

  1. Buat kelas pangkalan data kendiri dengan kod persediaan sambungan yang diperlukan.
  2. Lepaskan tika objek pangkalan data ini sebagai parameter pembina kepada mana-mana kelas yang memerlukan akses pangkalan data.

Dengan menerima prinsip ini, anda boleh memanfaatkan MySQLi dengan berkesan merentas berbilang kelas dalam aplikasi PHP anda.

Contoh Pelaksanaan

pangkalan data .php:

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

myapi.php:

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

app.php:

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

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

Penstrukturan semula ini memastikan akses yang konsisten kepada sumber pangkalan data sepanjang aplikasi anda, mengurangkan ralat pelayan dalaman yang anda hadapi.

Atas ialah kandungan terperinci Cara Mengakses MySQLi daripada Kelas Luaran dalam PHP: Mengatasi Ralat Pelayan Dalaman dengan Suntikan Ketergantungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan