In PHP wird die Funktion mySQLI_AutoCommit () verwendet, um die Funktion automatisch von Transaktionen zu aktivieren oder zu deaktivieren. Standardmäßig begeht MySQL nach Ausführung jeder Abfrage automatisch Transaktionen. In einigen Fällen müssen Entwickler jedoch möglicherweise die automatische Funktionsfunktion ausschalten, damit die Transaktionskonsistenz beibehalten wird, wenn mehrere Abfragen ausgeführt werden. In diesem Fall muss der Entwickler Commit () oder Rollback () manuell anrufen, um die Transaktion zu begehen oder zu rollen.
Manchmal haben wir jedoch Probleme, Transaktionen zu begehen, insbesondere bei Verwendung von MySQLI_AutoCommit () . Um diese Probleme zu finden, sind die beiden Eigenschaften von MySQLI :: $ errno und MySQLI :: $ error besonders wichtig. MySQLI :: $ errno kann uns helfen, den Fehlercode für MySQL -Operationen zu erhalten, während MySQLI :: $ Fehler Fehlerinformationen liefert. Die Kombination dieser beiden Attribute können problemlos Probleme debuggen und sie lokalisieren.
Schauen wir uns zunächst ein grundlegendes PHP -Beispiel an, das demonstriert, wie Sie MySQLI_AutoCommit () für die Transaktionskontrolle verwenden und wie MySQLI :: $ errno verwendet werden, um Fehler beim Begehen von Transaktionen zu debuggen.
<?php
// Erstellen Sie eine Datenbankverbindung
$mysqli = new mysqli("localhost", "username", "password", "database");
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Schalten Sie die Einreichung der automatischen Transaktion aus
$mysqli->autocommit(false);
// Starten Sie eine Transaktion
$mysqli->begin_transaction();
try {
// Führen Sie die erste Abfrage aus
$mysqli->query("INSERT INTO users (username, email) VALUES ('user1', 'user1@m66.net')");
// Führen Sie die zweite Abfrage aus
$mysqli->query("INSERT INTO orders (user_id, product) VALUES (1, 'product1')");
// Überprüfen Sie, ob ein Fehler vorliegt
if ($mysqli->errno) {
// Wenn ein Fehler vorliegt,Rollen Sie Transaktionen zurück
throw new Exception("Fehler:".$mysqli->error);
}
// Transaktionen einreichen
$mysqli->commit();
echo "Transaktion erfolgreich eingereicht!";
} catch (Exception $e) {
// Wenn eine Ausnahme gefangen wird,Rollen Sie Transaktionen zurück
$mysqli->rollback();
echo "Transaktionsrollback,Fehler信息:" . $e->getMessage();
}
// Schließen Sie die Datenbankverbindung
$mysqli->close();
?>
Verbindung zur Datenbank herstellen: Wir haben zuerst eine Datenbankverbindung über New MySQLI () erstellt, um eine Verbindung zum MySQL -Server herzustellen. Wenn die Verbindung fehlschlägt, erhalten Sie die Fehlermeldung über $ mysqli-> connect_error und beenden Sie das Programm.
Schalten Sie das automatische Commit aus: Verwenden Sie $ MySQLI-> AutoCommit (False), um den automatischen Komitiemodus auszuschalten. Dies bedeutet, dass die Transaktion nicht unmittelbar nach jeder Abfrage eingereicht wird, sondern einen manuellen Aufruf zum Bestnoten () erforderlich ist.
Transaktion ausführen: Wir starten die Transaktion über $ mysqli-> begin_transaction () und führen die Einfügenoperation über $ mysqli-> query () aus. Wenn ein Abfragefehler auftritt, gibt $ MySQLI-> Errno den Fehlercode zurück, und $ mySQLI-> Fehler gibt die Fehlerbeschreibung zurück.
Fehlerbehandlung: Wenn bei der Ausführung einer Abfrage ein Fehler auftritt, beurteilen wir den Fehler nach ($ mysqli-> errno) . Wenn der Fehler auftritt, werfen wir eine Ausnahme mithilfe neuer Ausnahme () und rollen Sie die Transaktion zurück ( $ mysqli-> rollback () ).
Commit Transaction: Wenn alle Abfragen keine Fehler haben, nennen wir $ MySQLI-> comment (), um die Transaktion zu begehen.
Schließen Sie die Verbindung: Schließlich schließen Sie die Datenbankverbindung mit $ mysqli-> close () .
Im obigen Code wird $ mysqli-> errno hauptsächlich verwendet, um festzustellen, ob die Abfrage erfolgreich ausgeführt wird. Wenn die Abfrage fehlschlägt, gibt $ MySQLi-> errno einen Fehlercode ungleich Null zurück, während $ MySQLI-> Fehler spezifische Fehlerbeschreibungsinformationen zurückgibt. Durch diese Informationen können wir das Problem schnell finden.
Wenn $ mysqli-> errno 0 ist, ist kein Fehler aufgetreten.
Wenn $ mysqli-> errno ein Wert ungleich Null ist, bedeutet dies, dass ein Fehler aufgetreten ist. Wir können $ MySQLI-> Fehler verwenden, um die spezifischen Fehlerinformationen anzuzeigen.
Wenn beispielsweise in der Tabelle bereits doppelte Daten vorhanden ist, wodurch der Einfügen bei der Ausführung einer Einfügungsabfrage fehlschlägt, gibt MySQL einen Fehlercode 1062 zurück (angezeigt einen doppelten Schlüsselfehler). Zu diesem Zeitpunkt gibt $ mysqli-> errno 1062 zurück, während $ mysqli-> Fehler eine Fehlermeldung wie "doppelte Eintrag" user1 "für den Schlüssel" primär "zurückgibt.
1062 - Eingaberaste wiederholen (z. B. Primärschlüssel Duplikation)
1046 - Keine Datenbank ausgewählt
1146 - Die Tabelle existiert nicht
2002 - Eine Verbindung zum MySQL -Server herzustellen ist fehlgeschlagen
Durch $ MySQLI-> Errno und $ mySQLI-> Fehler können wir die Ursache des Fehlers effektiv lokalisieren und entsprechende Maßnahmen rechtzeitig ergreifen.
Zusammenfassen
Bei Verwendung von MySQLI_AutoCommit () für die Transaktionskontrolle sind MySQLI :: $ errno und mySQLi :: $ error bei der Begegnung mit Problemen sehr nützliche Debugging -Tools. Sie können den Entwicklern helfen, die Fehlerursache schnell zu lokalisieren und damit effizienter Probleme zu debugieren und zu lösen. Denken Sie während des tatsächlichen Entwicklungsprozesses daran, Transaktions- und Fehlerbehandlungsmechanismen vernünftigerweise zu verwenden, um die Zuverlässigkeit und Stabilität von Datenbankoperationen zu gewährleisten.