2016-04-27 15 views
0

Ich versuche herauszufinden, wie die mysql Verbindung innerhalb einer Klasse zu behandeln. Ohne es immer in eine if-Anweisung zu verpacken. Hier ist ein Beispiel, das Ihnen hilft zu verstehen, was ich versuche zu tun.Wie behandelt man mysql Verbindungsausnahme auf die einfachste Weise

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; 
     } 
    } 

}

Wie Sie sehen können, wenn ich mehr Skripte hinzufügen waren ich hätte in einer Menge hinzuzufügen, wenn Fänge sie angeschlossen prüfen hat. Gibt es so etwas wie eine Ausnahmeroutine für Funktionen, die PHP hat? IE-Funktion foo löst Ausnahme aus?

+0

Sie können eine Klasse so etwas wie DB schreiben, die Verbindung in Konstrukt haben und rufen seine Funktion die Abfrage zu tun. In Ihren Skripten wäre es etwa so: '$ db = new Database' und dann' $ db-> Query ('SELECT * FROM table'); ' – Autor69

+0

Verwenden Sie throw und catch für die Ausnahmebehandlung http://stackoverflow.com/questions/17549584/how-to-effizient-verwenden-try-catch-blocks-in-php – Hahn

+0

Versuchen Sie PDO: http://php.net/manual/en/book.pdo.php –

Antwort

1

Dies ist eine einfache Möglichkeit, Ausnahmen zu behandeln PDO mit:

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 !'; 
0
  1. Es ist ein bad ideadie() innerhalb einer Klassenmethode zu verwenden. Ihre Anwendung wird möglicherweise unerwartet beendet, wenn eine Teilausgabe gesendet wird, Fehler nicht korrekt behandelt werden usw. Es ist so, als ob Sie während der Ausführung des Skripts Strom auf dem Server schalten. Das Ergebnis ist unvorhersehbar. Eine kleine Anmerkung hier, Sie haben harte Zeiten, die den Code mit Unit Tests testen, wenn Sie die() Anweisungen haben. Ich kann hier mehr Probleme aufzählen.

  2. PDO löst exceptions aus, wenn etwas schief geht. Aber höchstwahrscheinlich müssen Sie die Ausnahme in der Klasse Connection nicht abfangen, da Sie die Ausnahme in dieser Klasse nicht behandeln können. Sie können keinen Fehler an den Kunden senden oder den Fehler protokollieren oder einen Rollback für eine laufende Aktivität durchführen oder den Administrator usw. benachrichtigen. Sie können nichts tun, außer möglicherweise durch eine andere Ausnahme.

  3. Ich denke, Sie müssen Ihre Anwendung überprüfen und fangen PDOException in dem Code, wo Sie wirklich etwas tun können. Höchstwahrscheinlich geschieht dies durch Ihr Framework und Sie müssen das Standardverhalten des Frameworks ändern. Eine andere Option besteht darin, dies in der Klasse zu tun, die für eine Geschäftslogik verantwortlich ist. In diesem Fall könnten Sie etwas anderes tun, wenn SQL fehlschlägt.

+0

ich werde vermeiden "sterben" dann danke für den Tipp – user629283

Verwandte Themen