English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Die Funktion mysqli_rollback() kehrt die aktuelle Transaktion zurück
MySQL-Datenbanken haben die Funktion der automatischen Transaktionsabgabe, wenn Sie sie aktivieren, werden die Änderungen, die Sie in der Datenbank vornehmen, automatisch gespeichert; wenn Sie sie deaktivieren, müssen Sie die Funktion mysqli_commit() ausdrücklich aufrufen, um die Änderungen zu speichern.
mysqli_rollback();Die Funktion rollt die aktuelle Transaktion zurück zum letzten Speicherpunkt (oder zum angegebenen Speicherpunkt).
mysqli_rollback($con, [$flags, $name]);
Nummer | Parameter und Erklärung |
---|---|
1 | con (notwendig) Dies ist ein Objekt, das die Verbindung zum MySQL-Server darstellt. |
2 | flags (optional) kann einer der folgenden Konstanten sein:
|
3 | name (optional) Dies ist ein Name-Wert, der als ROLLBACK /* name */ ausführt. |
Der Rücksetzungsbefehl mysqli_rollback() gibt einen Boolean-Wert zurück, dertrue,sonstfalse.
Diese Funktion wurde ursprünglich in der PHP-Version5in PHP 5.3.0 eingeführt und ist in allen höheren Versionen verfügbar.
Nachfolgender Beispiel zeigt:mysqli_rollback();Verwendung des Funktionen (prozeduraler Stil)-
<?php //Verbindung herstellen $con = mysqli_connect("localhost", "root", "password", "mydb"); //Automatische Abgabe auf false setzen mysqli_autocommit($con, False); mysqli_query($con, "CREATE TABLE IF NOT EXISTS my_team(ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Place_Of_Birth VARCHAR(255), Country VARCHAR(255))"); //Fügen Sie den Eintrag in die Tabelle my_team ein mysqli_query($con, "insert into my_team values(1,'Shikhar', 'Dhawan', 'Delhi', 'India')"); mysqli_query($con, "insert into my_team values(2,'Jonathan', 'Trott', 'CapeTown', 'SouthAfrica')"); mysqli_query($con, "insert into my_team values(3,'Kumara', 'Sangakkara', 'Matale', 'Srilanka')"); mysqli_query($con, "insert into my_team values(4,'Virat', 'Kohli', 'Delhi', 'India')"); $res = mysqli_query($con, "SELECT * FROM my_team"); print("Zeilen (bei COMMIT): ".mysqli_affected_rows($con)."\n"); //Änderungen speichern mysqli_commit($con); //Tabelle leeren mysqli_query($con, "DELETE FROM my_team where id in(3,4); $res = mysqli_query($con, "SELECT * FROM my_team"); print("Zeilen (vor ROLLBACK): ".mysqli_affected_rows($con)."\n"); //Rückgängig machen mysqli_rollback($con); //Inhalt der Tabelle $res = mysqli_query($con, "SELECT * FROM my_team"); print("Zeilen (nach ROLLBACK): ".mysqli_affected_rows($con)); //Verbindung schließen mysqli_close($con); ?>
Ausgabeergebnis
Zeilen (bei COMMIT): 4 Zeilen (vor ROLLBACK): 2 Zeilen (nach ROLLBACK): 4
Die Syntax für diese Methode im objektorientierten Stil ist:$con->rollback();Hier ist ein Beispiel für diese Funktion im objektorientierten Stil;
//Verbindung herstellen $con = new mysqli("localhost", "root", "password", "mydb"); //Automatische Abgabe auf false setzen $con->autocommit(FALSE); //Eine Zeile in der Tabelle players einfügen $con->query("CREATE TABLE IF NOT EXISTS players(First_Name VARCHAR(255), Last_Name VARCHAR(255), Country VARCHAR(255))"); $con->query("insert into players values('Shikhar', 'Dhawan', 'India')"); $con->query("insert into players values('Jonathan', 'Trott', 'SouthAfrica')"); //Ergebnisse speichern $con->commit(); $con->query("insert into players values('Kumara', 'Sangakkara', 'Srilanka')"); $con->query("insert into players values('Virat', 'Kohli', 'India')"); //Rückgängig machen $con-> rollback(); $res = $con-> query("SELECT * FROM players); print_r($res); //Verbindung schließen $res = $con -> close(); ?>
Ausgabeergebnis
mysqli_result Object ( [current_field] => 0 [field_count] => 3 [lengths] => [num_rows] => 2 [type] => 0 )
Automatische Übertragung ausschalten, einige Abfragen durchführen, die Abfragen übertragen und dann die aktuelle Transaktion zurückrollen:
<?php $connection = mysqli_connect("localhost", "root", "password", "mydb"); if (mysqli_connect_errno($connection)){ echo "MySQL-Verbindung fehlgeschlagen: " . mysqli_connect_error(); } mysqli_autocommit($connection, FALSE); mysqli_query($connection, "create table test(Name VARCHAR(255), Alter INT); mysqli_query($connection, "INSERT INTO test VALUES ('Sharukh', 25); mysqli_commit($connection); mysqli_query($connection, "INSERT INTO test VALUES ('Kalyan', 30); mysqli_rollback($connection); mysqli_close($connection); ?>
执行以上程序后,如果验证表test的内容,则可以看到插入的记录为-
mysql> select * from test; +---------+------+ | Name | Alter | +---------+------+ | Sharukh | 25 | +---------+------+ 1 row in set (0.00 sec)