【问题标题】:Getting a 'friendly' error message for an exception获取异常的“友好”错误消息
【发布时间】:2012-10-08 17:58:13
【问题描述】:

我正在尝试连接到数据库,如果有任何问题,我会抛出异常:

class Ex_cnt extends Exception{}
class Ex_slct extends Exception{}
$server = "localhost";
$usr = "root";
$pss = "*******";
$db = "learn";
try{
        $cnt = mysqli_connect($server,$usr,$pss);
        if(!$cnt){
            throw new Ex_cnt("wrong in database details");
        }
        $dbslct = mysql_select_db($db);
        if(!$dbslct){
            throw new Ex_slct("wrong database name");
        } 
}
catch(Ex_cnt $error_cnt){
        echo $error_cnt->getMessage();
}
catch(Ex_slct $error_slct){
        echo $error_slct->getMessage();
}

问题是这段代码显示以下错误

警告:mysqli_connect() [function.mysqli-connect]: (28000/1045): D:\xampp\htdocs\learn\index 中用户 'root'@'localhost' 的访问被拒绝(使用密码:YES) .php 在第 10 行 无法连接

我希望它只是显示

无法连接

【问题讨论】:

    标签: php exception


    【解决方案1】:

    您应该在生产环境中关闭display_errors

    ini_set('display_errors', 0);  
    error_reporting(E_ALL); // While error reporting should remain at full force
    

    【讨论】:

      【解决方案2】:

      试用并使用:

      $cnt = @mysqli_connect($server,$usr,$pss);
      

      【讨论】:

      • 看在上帝的份上!不要抑制错误!这和建议一样糟糕!此外,抑制错误并不能修复连接失败
      • @OmarMoustafa:您不仅没有解决问题(无法连接),使用@ 抑制错误意味着错误不会被记录为 "the就 PHP 而言,错误从未真正发生过”。这意味着客户/用户无法获得所请求的数据,但是无论谁检查日志以找出他们为什么不断收到有关网站关闭的反馈,他们都不知道去哪里查看
      • @ 等于 display_errors=0 ...“错误从未真正发生过”是错误的。它可以被记录并发生。阅读手册。
      • @OmarMoustafa:您的 catch 块只会回显消息,您甚至还没有找到一开始无法连接的原因
      • 他问了一个问题,我为他的案例提供了最简单的实现......如果这是他想要的,他可以编写自定义错误处理。
      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多