Dalam percubaan untuk mewujudkan sambungan pangkalan data, anda menghadapi masalah di mana mesej ralat tersuai yang anda tentukan tidak dipaparkan apabila sambungan gagal. Anda juga sedang mencari kaedah untuk menyekat mesej ralat daripada pandangan pengguna.
Bermula dengan PHP 8.1, sambungan mysqli kini secara automatik membuang pengecualian sekiranya berlaku ralat, menghapuskan keperluan untuk pengendalian ralat manual seperti yang dilakukan dalam versi PHP yang lebih awal.
Mesej ralat tersuai, seperti yang anda takrifkan, tidak lagi disyorkan untuk pengendalian ralat. Kedua-dua PDO dan mysqli mempunyai keupayaan untuk menimbulkan ralat secara automatik, sama seperti arahan PHP yang lain. Oleh itu, menyemak ralat secara manual, seperti yang anda cuba lakukan dengan segmen if (!$conn), adalah usang.
Untuk menghalang mesej ralat daripada sampai kepada pengguna , anda harus menggunakan pilihan konfigurasi display_errors, yang boleh ditetapkan kepada 0 untuk menyekat semua output ralat. Ini boleh dikonfigurasikan dalam fail php.ini atau terus dalam kod PHP anda:
<code class="php">ini_set('display_errors', 0);</code>
Daripada memaparkan mesej ralat samar, adalah dinasihatkan untuk membentangkan halaman ralat mesra pengguna kepada pelawat tapak. Ini boleh dicapai dengan menyediakan pengendali ralat, seperti yang di bawah, yang akan menangkap semua ralat yang tidak boleh dipulihkan:
<code class="php">set_exception_handler(function ($e) { error_log($e); http_response_code(500); if (ini_get('display_errors')) { echo $e; } else { echo "<h1>500 Internal Server Error</h1>\nAn internal server error has been occurred.<br>\nPlease try again later."; } });</code>
Jika anda perlu mengendalikan secara khusus ralat sambungan pangkalan data, anda boleh menggunakan skrip ujian sambungan berasingan yang dibalut dalam blok cuba-tangkap, berasingan daripada kod sambungan biasa anda.
Untuk keselamatan yang dipertingkat, kemas kini versi PHP anda kepada 8.2 atau lebih baru, yang mengaburkan kata laluan pangkalan data daripada dipaparkan dalam surih tindanan.
Atas ialah kandungan terperinci Mengapa Mesej Ralat Tersuai Saya Tidak Dipaparkan dalam mysqli_connect Kegagalan Selepas Menaik taraf kepada PHP 8.1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!