Aktueller Standort: Startseite> Neueste Artikel> Wie können PDO :: __ Construct Ausnahmen und Fehler behandeln? Machen Sie Ihren Code robuster

Wie können PDO :: __ Construct Ausnahmen und Fehler behandeln? Machen Sie Ihren Code robuster

gitbox 2025-09-04

1. Einführung in PDO :: __ Konstruktmethode

Die PDO -Klasse bietet einen Konstruktor __construct , mit dem eine Verbindung zur Datenbank erstellt wird. Bei Verwendung dieses Konstruktors müssen Sie die folgenden Parameter übergeben:

  • DSN (Datenquellenname): Eine Zeichenfolge, die Verbindungsinformationen enthält, z. B. Datenbanktyp, Hostname, Datenbankname usw.

  • Benutzername : Datenbank Benutzername.

  • Passwort : Datenbankkennwort.

  • Optionen (optional): PDO bietet einige Konfigurationsoptionen, z. B. Einstellungsfehlermodus, Zeichensatz usw.

Zum Beispiel:

 <span><span><span class="hljs-variable">$dsn</span></span><span> = </span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>;
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'root'</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$options</span></span><span> = [
    PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> =&gt; PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>, </span><span><span class="hljs-comment">// Setzen Sie den Fehlerbehandlungsmodus auf Ausnahme</span></span><span>
    PDO::</span><span><span class="hljs-variable constant_">ATTR_DEFAULT_FETCH_MODE</span></span><span> =&gt; PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>, </span><span><span class="hljs-comment">// Legen Sie die Standardmethode zum Abrufen von Daten fest</span></span><span>
];

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

In diesem Beispiel geben wir eine DSN -String über, um eine Verbindung zur MySQL -Datenbank herzustellen und den Fehlerbehandlungsmodus festzulegen.


2. Fehlerbehandlungsmodus: Auf Ausnahme einstellen ( pdo :: errmode_exception )

Standardmäßig ist der Fehlerbehandlungsmodus von PDO PDO :: errmode_silent , was bedeutet, dass die Ausnahme nicht ausgelöst wird, aber ein Fehlercode zurückgegeben wird. Wenn Sie einen Fehler haben, wirft das Programm daher keine Ausnahme automatisch aus. Sie müssen den Fehlercode explizit überprüfen und die Verarbeitung vornehmen. Dies kann dazu führen, dass einige potenzielle Fehler ignoriert werden, was es schwierig macht, Fehler zu beheben.

Um den Code robuster zu gestalten, wird empfohlen, den Fehlerbehandlungsmodus auf PDO :: errmode_exception einzustellen, was bedeutet, dass PDO eine PDOException -Ausnahme auswirft, wenn ein Fehler auftritt. Auf diese Weise können Sie Ausnahmen durch die Versuchsstruktur fangen und damit umgehen.

Stellen Sie den Fehlermodus auf eine Ausnahme ein

 <span><span><span class="hljs-variable">$options</span></span><span> = [
    PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> =&gt; PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>, </span><span><span class="hljs-comment">// Setzen Sie eine Ausnahme</span></span><span>
    PDO::</span><span><span class="hljs-variable constant_">ATTR_DEFAULT_FETCH_MODE</span></span><span> =&gt; PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>,
];

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

Im obigen Code wird pdo :: attr_errmode => pdo :: errmode_exception auf pdo eingestellt, wenn ein Fehler auftritt. Fangen Sie Ausnahmen an und behandeln Sie sie mit Fangblöcken , verhindern Sie Programmabstürze und geben Sie nützliche Fehlermeldungen aus.


3.. Wie man PDO -Ausnahmen fängt und umgeht

Ausnahmen fangen

Pdo :: errmode_exception führt dazu, dass die pDoException -Ausnahme automatisch ausgeworfen wird, wenn eine Ausnahme in einer Datenbankoperation auftritt. Sie können diese Ausnahmen in der Anweisung Try-Catch- Anweisung fangen.

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
    </span><span><span class="hljs-comment">// Datenbankvorgänge durchführen</span></span><span>
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Datenbankverbindungsfehler: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

In der Catch -Erklärung erhalten wir die Details der Ausnahme durch $ e-> getMessage () , was für das Debuggen und Abmelden sehr wichtig ist.

Ausnahmeinformationsdatensatz

Zusätzlich zum Anzeigen von Fehlermeldungen auf der Schnittstelle wird empfohlen, Ausnahmeinformationen im Protokoll für die anschließende Analyse und Fehlerbehebung aufzuzeichnen. Sie können PHPs Fehler_log () -Funktion verwenden oder eine Protokollbibliothek wie Monolog integrieren, um diese Informationen aufzuzeichnen.

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">'Datenbankverbindungsfehler: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>());
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Die Datenbankverbindung ist fehlgeschlagen,Bitte versuchen Sie es später erneut!'</span></span><span>;
}
</span></span>

4.. Häufige Datenbankverbindungsfehler und Handhabung

Fehler 1: Benutzername oder Kennwortfehler

Wenn der Benutzername oder das Kennwort falsch ist, löst PDO eine PDOException -Ausnahme aus, und die Fehlermeldung enthält normalerweise abgelehnt .

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'invalid_user'</span></span><span>, </span><span><span class="hljs-string">'wrong_password'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Datenbankverbindungsfehler: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// Ausgabe“Access denied”Fehler</span></span><span>
}
</span></span>

Fehler 2: Die Datenbank existiert nicht

Wenn die von Ihnen angegebene Datenbank nicht vorhanden ist, wirft PDO einen Fehler wie die unbekannte Datenbank 'testDB' .

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=nonexistent_db'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Datenbankverbindungsfehler: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// Ausgabe“Unknown database”Fehler</span></span><span>
}
</span></span>

Fehler 3: Der Datenbankserver ist nicht verfügbar

Wenn der Datenbankserver nicht verfügbar ist oder der Verbindungsablauf abgestimmt ist, löst die PDO eine verbindungsbezogene Ausnahme aus.

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=nonexistent_host;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Datenbankverbindungsfehler: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// Ausgabe“Could not find driver”oder“Connection timed out”</span></span><span>
}
</span></span>
  • Verwandte Tags:

    PDO