繁体   English   中英

如何以最简单的方式处理mysql连接异常

[英]How to handle mysql connection exception in the simplest way

我试图弄清楚如何处理一个类中的mysql连接。 不必总是将其包装在if语句中。 这是一个示例,可以帮助您了解我要执行的操作。

    class Database {
      protected $conn;
      protected $password;
      protected $username;
      protected $servername;

      public function Database(){
       $this->conn = new mysqli($this->servername,$this->username,$this->password);
      }

      public function scriptA(){
       if ($this->conn->connect_error) {
           die("Connection failed: " . $conn->connect_error);
        } else{
        //do script A
           return $result;
        }
     }

     public function scriptB(){
      if ($conn->connect_error) {
          die("Connection failed: " . $conn->connect_error);
      } else{
        //do script B
       return $result;
      }
    }

}

如您所见,如果我要添加更多脚本,则必须添加很多if捕获来检查它是否已连接。 是否有类似php的函数异常处理程序? IE函数foo引发异常?

这是使用PDO处理异常的简单方法:

    class Connection{
            public    $db;
            protected $DB_HOST;
            protected $DB_NAME;
            protected $DB_USER;
            protected $DB_PASSWORD;

            function __construct($db_host,$db_name,$db_user,$db_password){
                try{
                    $this->DB_HOST = $db_host;
                    $this->DB_NAME = $db_name;
                    $this->DB_USER = $db_user;
                    $this->DB_PASSWORD = $db_password;


                    $this->db = new pdo('mysql:host='.$this->DB_HOST.';dbname='.$this->DB_NAME,$this->DB_USER,$this->DB_PASSWORD);                      
                }catch(PDOException $e){
                    die($e->getMessage());
                }
            }   

    }

$con = new Connection('db_host','db_name','db_user','db_password');

// display something else here in case connection succeded.
echo 'congratulation you are no connected to your database !';
  1. 在类方法中使用die()是个坏主意 您的应用程序可能会因发送部分输出而意外停止,错误无法正确处理等。这就像您在脚本运行时在服务器上接通了电一样。 结果是不可预测的。 这里需要注意的一点是,当您拥有die()语句时,将很难用单元测试来测试代码。 如果您愿意,我可以在这里列出更多问题。

  2. 发生错误时,PDO会引发异常 但是很可能您不需要在Connection类中捕获异常,因为您不能在此类中处理异常。 您不能将错误发送给客户,也不能记录错误或回滚正在进行的活动或通知管理员等。您可能无法做任何事情,除非可能是由于其他异常。

  3. 我认为您需要检查您的应用程序,并在代码中捕获PDOException ,您才能真正做到这一点。 这很可能是由您的框架完成的,您需要更改框架的默认行为。 另一个选择是在负责某些业务逻辑的类中执行此操作。 在这种情况下,如果SQL失败,您可能会做一些不同的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM