Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Mesej Ralat Tersuai Saya Tidak Dipaparkan dalam mysqli_connect Kegagalan Selepas Menaik taraf kepada PHP 8.1?

Mengapa Mesej Ralat Tersuai Saya Tidak Dipaparkan dalam mysqli_connect Kegagalan Selepas Menaik taraf kepada PHP 8.1?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 20:38:02193semak imbas

Why Are My Custom Error Messages Not Displaying in mysqli_connect Failures After Upgrading to PHP 8.1?

Menyiasat Mesej Ralat Tersuai Tersembunyi dalam Kegagalan mysqli_connect

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.

Sifat Mesej Ralat

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.

Rasional Di Sebalik Penindasan Ralat

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.

Mengelakkan Pendedahan Ralat kepada Pengguna

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>

Menyediakan Halaman Ralat Mesra Pengguna

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>

Mengendalikan Ralat Sambungan Pangkalan Data Secara Berasingan

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.

Melindungi Bukti Kelayakan Sambungan

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!

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