"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que minhas mensagens de erro personalizadas não são exibidas nas falhas do mysqli_connect após a atualização para o PHP 8.1?

Por que minhas mensagens de erro personalizadas não são exibidas nas falhas do mysqli_connect após a atualização para o PHP 8.1?

Publicado em 2024-11-08
Navegar:486

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

Investigando a mensagem de erro personalizada oculta em falhas do mysqli_connect

Em uma tentativa de estabelecer uma conexão com o banco de dados, você encontrou um problema em que a mensagem de erro personalizada que você definiu não estava sendo exibido quando a conexão falhou. Você também está procurando um método para suprimir mensagens de erro da visão do usuário.

A natureza da mensagem de erro

A partir do PHP 8.1, a extensão mysqli agora lança exceções automaticamente no caso de uma erro, eliminando a necessidade de tratamento manual de erros como era feito em versões anteriores do PHP.

A lógica por trás da supressão de erros

Mensagens de erro personalizadas, como a que você definiu, não são mais recomendadas para tratamento de erros. Tanto o PDO quanto o mysqli têm a capacidade de gerar erros automaticamente, assim como qualquer outro comando PHP. Portanto, a verificação manual de erros, como você tentou fazer com o segmento if (!$conn), é obsoleta.

Evitando a exposição de erros aos usuários

Para evitar que mensagens de erro cheguem ao usuário , você deve utilizar a opção de configuração display_errors, que pode ser definida como 0 para suprimir todas as saídas de erro. Isso pode ser configurado no arquivo php.ini ou diretamente no seu código PHP:

ini_set('display_errors', 0);

Fornecendo uma página de erro amigável

Em vez de exibir mensagens de erro enigmáticas, é aconselhável apresentar uma página de erro amigável aos visitantes do site. Isso pode ser conseguido configurando um manipulador de erros, como o mostrado abaixo, que capturará todos os erros irrecuperáveis:

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.";
    }
});

Tratando erros de conexão de banco de dados separadamente

Se precisar lidar especificamente com erros de conexão de banco de dados, você pode usar um script de teste de conexão separado, envolvido em um bloco try-catch, separado do seu script normal código de conexão.

Protegendo credenciais de conexão

Para maior segurança, atualize sua versão do PHP para 8.2 ou posterior, o que impede que as senhas do banco de dados apareçam no rastreamento de pilha.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3