Bei der Durchführung von Datenbankvorgängen in PHP ist MySQLI eine sehr häufige Erweiterung, die objektorientierte und prozedurale Schnittstellen liefert. Heute werden wir diskutieren, wie Sie MySQLI :: STMT_INIT -Funktion mit der Transaktionskontrolle ( Beginn_Transaction , Commit , Rollback ) kombinieren können, um die Stabilität und Effizienz von Datenbankvorgängen zu verbessern.
MySQLI :: STMT_INIT ist eine Methode in der MySQLI -Klasse, mit der eine Vorverarbeitungsanweisung initialisiert wird. Vorbereitete Aussagen können nicht nur SQL -Injektionsangriffe verhindern, sondern auch die Ausführungseffizienz von Datenbankabfragen verbessern. Denn bei der Verwendung von Vorverarbeitungsanweisungen wird die Abfrageanweisung einmal analysiert, und während der Ausführung können verschiedene Parameter übergeben werden, wodurch der Overhead der wiederholten Parsen von SQL -Anweisungen verringert wird.
In einer Datenbank bezieht sich eine Transaktion auf eine Reihe von Datenbankvorgängen, die entweder erfolgreich sind oder fehlschlagen. Transaktionen gewährleisten Datenkonsistenz und Zuverlässigkeit. Die grundlegenden Operationen einer Transaktion umfassen:
Beginn_transaction : Starten Sie eine Transaktion.
Commit : Beweistransaktionen so, dass die Änderungen an der Datenbank wirksam werden.
Rollback : Rollback -Transaktionen und widerrufen alle Operationen in der Transaktion.
Wenn Sie mehrere Datenbankvorgänge ausführen, müssen Sie möglicherweise sicherstellen, dass diese Vorgänge entweder erfolgreich sind oder fehlschlagen. Um dies zu erreichen, können Sie die Transaktionskontrolle verwenden.
Durch die Verwendung von MySQLI :: STMT_INIT in Kombination mit der Transaktionskontrolle kann die Stabilität mehrerer Datenbankvorgänge gewährleistet werden. Wenn ein Betrieb während der Ausführung fehlschlägt, können Sie die Transaktion zurückrollen, um alle ausgeführten Vorgänge zu widerrufen, um die Konsistenz der Datenbank sicherzustellen.
Hier ist ein PHP -Code -Beispiel , das MySQLI :: STMT_INIT mit der Transaktionskontrolle kombiniert:
<?php
// Erstellen Sie eine Datenbankverbindung
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Starten Sie eine Transaktion
$mysqli->begin_transaction();
try {
// Initialisieren Sie Vorverarbeitungsanweisungen
$stmt = $mysqli->stmt_init();
// Der erste Einfügungsvorgang
if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
$username = 'user1';
$email = 'user1@m66.net';
$stmt->bind_param("ss", $username, $email);
$stmt->execute();
} else {
throw new Exception("Die Erklärung ermöglichte die Erklärung nicht");
}
// Der zweite Einfügungsvorgang
if ($stmt->prepare("INSERT INTO orders (user_id, product) VALUES (?, ?)")) {
$user_id = 1; // Unter Annahme des BenutzerIDfür1
$product = 'Product A';
$stmt->bind_param("is", $user_id, $product);
$stmt->execute();
} else {
throw new Exception("Die Erklärung ermöglichte die Erklärung nicht");
}
// Transaktionen einreichen
$mysqli->commit();
echo "Transaktion erfolgreich eingereicht!";
} catch (Exception $e) {
// Rollen Sie die Transaktion zurück, wenn ein Fehler auftritt
$mysqli->rollback();
echo "Transaktionsrollback: " . $e->getMessage();
}
// Schließen Sie die Verbindung
$mysqli->close();
?>
Stellen Sie eine Datenbankverbindung fest: Verwenden Sie die neue Funktion MySQLI (), um eine Verbindung zur MySQL -Datenbank herzustellen. Wenn die Verbindung fehlschlägt, gibt das Programm eine Fehlermeldung aus und stoppt die Ausführung.
Starten Sie eine Transaktion: Verwenden Sie $ MySQLI-> begin_transaction (), um eine Transaktion zu starten. Nach dem Beginn der Transaktion werden alle Datenbankvorgänge in der Transaktion ausgeführt, bis die Transaktion festgelegt oder zurückgerollt wird.
Vorverarbeitungsanweisungen initialisieren und vorbereiten: Verwenden Sie die Methode $ MySQLi-> stmt_init (), um ein Vorverarbeitungsanweisungsobjekt zu initialisieren. Verwenden Sie dann die Methode $ stmt-> prepe (), um die SQL-Abfrage vorzubereiten.
BIND-Parameter und Ausführen: Verwenden Sie die Methode $ STMT-> BIND_PARAM (), um die Parameter in SQL-Anweisungen zu binden, um sicherzustellen, dass Daten sicher eingefügt werden. Verwenden Sie dann $ stmt-> execute (), um die Vorverarbeitungsanweisung auszuführen.
Commit- oder Rollback-Transaktion: Wenn alle Vorgänge erfolgreich sind, verwenden Sie $ MySQLi-> commit (), um die Transaktion zu begehen und alle Änderungen in der Datenbank zu speichern. Wenn während der Ausführung ein Fehler auftritt, wird eine Ausnahme ausgelöst und die Transaktion mit $ mysqli-> rollback () im Catch- Anweisungsblock zurückgeführt, wodurch alle vorherigen Vorgänge widerrufen werden.
Schließen Sie die Verbindung: Schließen Sie nach Abschluss des Vorgangs die Datenbankverbindung über $ mysqli-> close () .
Durch die Kombination von MySQLI :: STMT_INIT mit der Transaktionskontrolle können Sie die folgenden Vorteile genießen:
SQL -Injektion verhindern: Die Verwendung von Vorverarbeitungsanweisungen kann die SQL -Injektionsangriffe effektiv verhindern.
Verbesserung der Effizienz: Vorverarbeitungsanweisungen müssen bei der Ausführung nicht wiederholt SQL analysieren und die Belastung der Datenbank verringern.
Stellen Sie sicher, dass die Datenkonsistenz sichergestellt wird: Durch die Transaktionskontrolle wird die Atomizität von Datenbankvorgängen sichergestellt, entweder alle erfolgreich oder alle fehlschlagen, wodurch Datenkonsistenzen vermieden werden.
Ausnahmebehandlung: Wenn während des Betriebs ein Fehler auftritt, können Sie die Transaktion zurückrollen, um sicherzustellen, dass die Datenbank nicht beschädigt ist.
Kombinieren Sie die Funktion und die Transaktionskontrolle von MySQLI :: STMT_INIT ( begin_Transaction , Commit , Rollback ), Sie können die Stabilität und Effizienz von PHP -Programmen für Datenbankoperationen verbessern. Dies vermeidet nicht nur effektiv SQL -Injektionsprobleme, sondern stellt auch die Datenkonsistenz sicher, wenn mehrere Datenbankvorgänge ausfallen und die Datenbeschädigung vermieden werden.