English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A função mysqli_rollback() rejeita a transação atual
O banco de dados MySQL possui a função de submissão automática de transações, se você ativar, as alterações feitas no banco de dados serão salvas automaticamente; se desativar, será necessário usar a função mysqli_commit() para salvar explicitamente as alterações.
A seguir, um exemplo demonstra函数将当前事务滚动到最后一个保存点(或指定的保存点)。
A função rolla a transação atual para o último ponto de salvamento (ou para o ponto de salvamento especificado).
mysqli_rollback($con, [$flags, $name]); | Parâmetro |
---|---|
1 | Número Parâmetros e descrições |
2 | con (obrigatório) Este é um objeto que representa a conexão com o servidor MySQL.
|
3 | MYSQLI_TRANS_COR_RELEASE MYSQLI_TRANS_COR_NO_RELEASE /* name (opcional) */ Esta é uma chave de valor, quando especificada, será usada como ROLLBACK |
Execução.Retorno do valormysqli_rollback() retorna um valor booleano, true se a operação for bem-sucedida.Caso contrário, true,false
Versão do PHP5Inicialmente, esta função foi introduzida no PHP versão
introduzido e disponível em todas as versões mais recentes.A seguir, um exemplo demonstramysqli_rollback();-
<?php //estabelecer conexão Uso da função (estilo procedimental) //definir o commit automático como falso $con = mysqli_connect("localhost", "root", "password", "mydb"); Desativar o auto-commit do mysqli255), Last_Name VARCHAR(255Criar a tabela my_team se ela não existir (ID INT, Primeiro_Nome VARCHAR(255), Country VARCHAR(255))"); //, Local_de_Nascimento VARCHAR( , 'Kumara', 'Sangakkara', 'Matale', 'Sri Lanka')");1Inserir registros na tabela my_team , 'Kumara', 'Sangakkara', 'Matale', 'Sri Lanka')");2, 'Shikhar', 'Dhawan', 'Delhi', 'India')"); , 'Kumara', 'Sangakkara', 'Matale', 'Sri Lanka')");3, 'Jonathan', 'Trott', 'Cape Town', 'South Africa')"); , 'Kumara', 'Sangakkara', 'Matale', 'Sri Lanka')");4, 'Virat', 'Kohli', 'Delhi', 'India')"); $res = mysqli_query($con, "SELECT * FROM my_team"); print("número de linhas (ao commit): ".mysqli_affected_rows($con)."\n"); //salvar alterações mysqli_commit($con); //truncar tabela mysqli_query($con, "DELETE FROM my_team where id in(3,4); $res = mysqli_query($con, "SELECT * FROM my_team"); print("número de linhas (antes do rollback): ".mysqli_affected_rows($con)."\n"); //Reverter mysqli_rollback($con); //conteúdo da tabela $res = mysqli_query($con, "SELECT * FROM my_team"); print("número de linhas (após rollback): ".mysqli_affected_rows($con)); //Fechar Conexão mysqli_close($con); ?>
Resultados de Saída
número de linhas (ao commit): 4 número de linhas (antes do rollback): 2 número de linhas (após rollback): 4
A sintaxe dessa método no estilo orientado a objetos é$con->rollback();Aqui está um exemplo dessa função no estilo orientado a objetos;
//estabelecer conexão $con = new mysqli("localhost", "root", "password", "mydb"); //definir o commit automático como falso $con->autocommit(FALSE); //inserir um registro na tabela 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')"); //salvar resultado $con->commit(); $con->query("insert into players values('Kumara', 'Sangakkara', 'Srilanka')"); $con->query("insert into players values('Virat', 'Kohli', 'India')"); //Reverter $con-> rollback(); $res = $con-> query("SELECT * FROM players); print_r($res); //Fechar Conexão $res = $con -> close(); ?>
Resultados de Saída
mysqli_result Object ( [current_field] => 0 [field_count] => 3 [lengths] => [num_rows] => 2 [type] => 0 )
Desativar o commit automático, fazer algumas consultas, submeter consultas e depois reverter a transação atual:
<?php $connection = mysqli_connect("localhost", "root", "password", "mydb"); if (mysqli_connect_errno($connection)){ echo "Conexão MySQL falhou: " . 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; +---------+------+ | Nome | Idade | +---------+------+ | Sharukh | 25 | +---------+------+ 1 row in set (0.00 sec)