: Melden Sie Verbindungs- und Abfragefehler über den Ausnahmemechanismus ( PDOException ). Der Code kann mit Try ... Catch erfasst werden, und die Ausnahmeinformationen enthält detaillierte Fehlerbeschreibungen.
MySQLI : Verwenden Sie Eigenschaften und Methoden wie $ mysqli-> connect_error und $ mysqli-> connect_errno, um Verbindungsfehler zu melden. Fehler werfen keine Ausnahmen automatisch und müssen aktiv erkannt und verarbeitet werden.
Mit anderen Worten, PDO stützt sich mehr auf Ausnahmemechanismen, während MySQLI mehr auf explizite Fehlerprüfung angewiesen ist.
try {
$pdo = new PDO('mysql:host=gitbox.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Verbindung erfolgreich";
} catch (PDOException $e) {
echo "Verbindung ist fehlgeschlagen: " . $e->getMessage();
}
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'testdb');
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
echo "Verbindung erfolgreich";
HINWEIS: MySQLI erhält die Verbindungsfehlermeldung über $ mysqli-> connect_error und wirft keine automatischen Ausnahmen aus und muss manuell überprüft werden.
PDO verwendet Ausnahmen, und die Codestruktur ist einfacher und sicherer.
MySQLI muss $ MySQLi-> Connect_error oder $ mySQLi-> Connect_errno explizit beurteilen.
Wenn Sie es gewohnt sind , den Versuch zu verwenden, um Ausnahmen zu fangen, müssen Sie die Fehlerbehandlungslogik nach dem Umschalten auf MySQLI anpassen.
PDO gibt direkt das in der DSN -Verbindungszeichenfolge festgelegte Zeichen an, wie z. B. charSet = utf8 , mySQLI erfordert zusätzliche Anrufe:
$mysqli->set_charset('utf8');
Andernfalls wird es Probleme mit dem chinesischen verstümmelten Code geben.
PDO unterstützt viele Verbindungsoptionen, während MySQLI einige Optionen unterstützt. Zum Beispiel:
PDO kann mit PDO :: attr_persistent aktiviert werden.
MySQLI erfordert zusätzliche Verarbeitung oder verwenden verschiedene Möglichkeiten, um anhaltende Verbindungen zu ermöglichen.
Die PDO-Vorverarbeitungsanweisung verwendet $ STMT = $ PDO-> PREPET ($ SQL); Unterstützung der benannten Parameterbindung.
Die MySQLI-Vorverarbeitungsanweisung verwendet $ STMT = $ mysqli-> prepe ($ sql); und nur Fragemark -Platzhalter werden unterstützt.
Wenn der ursprüngliche Code eine große Anzahl benannter Parameter verwendet, muss er als Fragezeichen neu geschrieben werden.
MySQLI wirft standardmäßig keine Ausnahmen aus. Wenn Sie die Ausnahmeregelung von PDO simulieren möchten, können Sie die MySQLI -Ausnahme -Wurffunktion aktivieren:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Nach dem Öffnen wirft MySQLI MySQLI_SQL_Exception , was auf einheitliche Weise einfacher zu behandeln ist.
Projekt | Pdo | Mysqli |
---|---|---|
Fehlerbehandlung | Ausnahmefang (Versuchen Sie ... Fang) | Überprüfen Sie $ $ connect_error extern, um Ausnahmen zu aktivieren |
Verbindungszeichenfolge Format | DSN String (Charset kann eingestellt werden) | Setzen Sie charSet separat, Sie müssen set_charset () aufrufen,) |
Vorverarbeitungsparameterbindung | Unterstützen Sie die Namensparameter | Es werden nur Fragemarke -Platzhalter unterstützt |
Anhaltende Verbindungsunterstützung | Durch Optionen eingestellt | Benötigen unterschiedliche Methoden zum Implementieren |
Kurz gesagt, das Umschalten von PDO zu MySQLI ist nicht nur eine Ersatzverbindungsmethode, sondern auch die Unterschiede in der Fehlerhandhabung, der Codierungseinstellungen, der Vorverarbeitung von Anweisungen usw., um implizite Fehler zu vermeiden, die durch die Untaptierung verursacht werden.