如何在php中显示较少的连接错误内容

How to display less content of connection error in php

我一直在观看 PHP 中关于 MySQL 基本连接的视频。并试图将错误内容从“致命错误:未捕获 mysqli_sql_exception:php_network_getaddresses....”隐藏到例如“错误 2002”。我尝试了一些方法,但它仍然显示整个文本。我的代码: 我也尝试使用 try/catch 块,但它仍然显示整个文本。我使用 vs 代码和 PHP 8.1

   <?php 
     require_once "connect.php";

      $connection = @new mysqli($host,$db_user,$db_passw,$db_name);

      if($connection->connect_errno != 0){
       echo "Error ".$connection->connect_errno;             // <- this place
       //echo mysqli_report($connection->connect_errno);
       //die($connection->connect_errno);
       }else{
         $login = $_POST['username'];
         $passw = $_POST['password'];
  
        $connection -> close();
      }
   ?>

////////////////////////////////////////// //////////////// ......

      try {
         $connection = @new mysqli($host,$db_user,$db_passw,$db_name);
       } catch (Exception $e) {
               echo 'Caught exception: ',  $e->getMessage(), "\n";
      }

      ...........

它显示了完整的错误消息,因为您确实要求它:

echo 'Caught exception: ', $e->getMessage(), "\n";

如果您想显示数字错误代码,只需这样做:

echo 'Error ', $e->getCode(), "\n";

需要注意的是 mysqli_report() 似乎并没有阻止 all 警告。这感觉像是一个实施监督,但我没有更多关于它的信息。为此,您已经在使用的错误抑制运算符 @ 就足够了。

此外,不要忘记在生产服务器中禁用 display_errors 指令。

最后,自 PHP/8.1 以来,Mysqli 默认仅在错误时抛出异常。在早期版本中,您需要明确设置它:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);