English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
mysqli_rollback() 함수는 현재 트랜잭션을 되돌립니다
MySQL 데이터베이스는 자동으로 트랜잭션을提交하는 기능을 가지고 있으며, 그를 활성화하면 데이터베이스에서 수행한 변경이 자동으로 저장됩니다; 그를 비활성화하면 mysqli_commit() 함수를 사용하여 명시적으로 변경을 저장해야 합니다.
mysqli_rollback();이 함수는 현재 트랜잭션을 마지막으로 저장된 포인트(또는 지정된 포인트)로 롤백합니다.
mysqli_rollback($con, [$flags, $name]);
순번 | 매개변수 및 설명 |
---|---|
1 | con(필수) 이는 MySQL Server와의 연결을 나타내는 객체입니다. |
2 | flags(선택) 다음 중 하나의 상수 중 하나일 수 있습니다:
|
3 | name(선택) 이는 이름 값이며, 지정되면 ROLLBACK으로 사용됩니다. /* name */ 실행. |
mysqli_rollback() 함수는 성공적으로 작동하면 부울 값을 반환합니다.true,그렇지 않으면false에서 초기화되었습니다.
이 함수는 원래 PHP 버전5중에서 도입되었으며, 모든 더 높은 버전에서 사용할 수 있습니다.
아래 예제에서는mysqli_rollback();함수의 사용법(과정 지향 스타일)-
<?php //연결 설정 $con = mysqli_connect("localhost", "root", "password", "mydb"); //자동提交을 false로 설정 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))"); //기록을 my_team 테이블에 삽입합니다 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("행수(提交时): ".mysqli_affected_rows($con)."\n"); //변경을 저장 mysqli_commit($con); //테이블을 초기화 mysqli_query($con, "DELETE FROM my_team where id in(3,4); $res = mysqli_query($con, "SELECT * FROM my_team"); print("행수(롤백 전): ".mysqli_affected_rows($con)."\n"); //뒤로 돌아갑니다 mysqli_rollback($con); //테이블의 내용 $res = mysqli_query($con, "SELECT * FROM my_team"); print("행수(롤백 후): ".mysqli_affected_rows($con)); //연결을 닫습니다 mysqli_close($con); ?>
출력 결과
행수(提交时): 4 행수(롤백 전): 2 행수(롤백 후): 4
面向对象风格的此方法的语法为$con->rollback();面向对象风格的此函数的示例;
//연결 설정 $con = new mysqli("localhost", "root", "password", "mydb"); //자동提交을 false로 설정 $con->autocommit(FALSE); //players 테이블에 레코드를 삽입 $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')"); //저장 결과 $con->commit(); $con->query("insert into players values('Kumara', 'Sangakkara', 'Srilanka')"); $con->query("insert into players values('Virat', 'Kohli', 'India')"); //뒤로 돌아갑니다 $con-> rollback(); $res = $con-> query("SELECT * FROM players"); print_r($res); //연결을 닫습니다 $res = $con -> close(); ?>
출력 결과
mysqli_result Object ( [current_field] => 0 [field_count] => 3 [lengths] => [num_rows] => 2 [type] => 0 )
자동提交을 끊고 몇 가지 쿼리를 수행한 후, 현재 트랜잭션을 롤백합니다:
<?php $connection = mysqli_connect("localhost", "root", "password", "mydb"); if (mysqli_connect_errno($connection)){ echo "MySQL 연결 실패: " . mysqli_connect_error(); } mysqli_autocommit($connection, FALSE); mysqli_query($connection, "create table test(Name VARCHAR(255), Age 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 | Age | +---------+------+ | Sharukh | 25 | +---------+------+ 1 row in set (0.00 sec)