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