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> => 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> => 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>-></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.
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.
<span><span><span class="hljs-variable">$options</span></span><span> = [
PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> => 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> => 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>-></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.
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>-></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.
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>-></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>
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>-></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>
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>-></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>
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>-></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