sqlsrv_rollback

Ladda ned PHP-drivrutin

Rullar tillbaka den aktuella transaktionen på den angivna anslutningen och återför anslutningen till auto-commit-läget. Den aktuella transaktionen inkluderar alla uttalanden på den angivna anslutningen som utfördes efter samtalet till sqlsrv_begin_transaction och före några anrop till sqlsrv_rollback eller sqlsrv_commit.

Note

Microsoft-drivrutinerna för PHP för SQL Server är i auto-commit-läge som standard. Det innebär att alla frågor automatiskt kommer att vara bekräftade när de lyckas, om de inte har angetts som en del av en explicit transaktion med hjälp av sqlsrv_begin_transaction.

Note

Om sqlsrv_rollback anropas på en anslutning som inte är i en aktiv transaktion som initierats med sqlsrv_begin_transaction, returnerar anropet falskt och ett Ej i Transaktion-felet läggs till felinsamlingen.

Syntax

  
sqlsrv_rollback( resource $conn)  

Parameters

$conn: Anslutningen där transaktionen är aktiv.

Returvärde

Ett boolesk värde: sant om transaktionen framgångsrikt rullades tillbaka. Annars falskt.

Example

Följande exempel utför två frågor som en del av en transaktion. Om båda frågorna lyckas genomförs transaktionen. Om någon (eller båda) av frågorna misslyckas rullas transaktionen tillbaka.

Den första frågan i exemplet infogar en ny försäljningsorder i tabellen Sales.SalesOrderDetail i AdventureWorks-databasen. Beställningen gäller fem enheter av produkten som har produkt-ID 709. Den andra frågan minskar lagermängden för produkt-ID 709 med fem enheter. Dessa frågor ingår i en transaktion eftersom båda sökningarna måste vara framgångsrika för att databasen korrekt ska kunna spegla orderstatus och produkttillgänglighet.

Exemplet förutsätter att SQL Server och AdventureWorks-databasen är installerade på den lokala datorn. Alla utdata skrivs till konsolen när exemplet körs från kommandoraden.

<?php  
/* Connect to the local server using Windows Authentication and  
specify the AdventureWorks database as the database in use. */  
$serverName = "(local)";  
$connectionInfo = array( "Database"=>"AdventureWorks");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn === false )  
{  
     echo "Could not connect.\n";  
     die( print_r( sqlsrv_errors(), true ));  
}  
  
/* Initiate transaction. */  
/* Exit script if transaction cannot be initiated. */  
if ( sqlsrv_begin_transaction( $conn) === false )  
{  
     echo "Could not begin transaction.\n";  
     die( print_r( sqlsrv_errors(), true ));  
}  
  
/* Initialize parameter values. */  
$orderId = 43659; $qty = 5; $productId = 709;  
$offerId = 1; $price = 5.70;  
  
/* Set up and execute the first query. */  
$tsql1 = "INSERT INTO Sales.SalesOrderDetail   
                     (SalesOrderID,   
                      OrderQty,   
                      ProductID,   
                      SpecialOfferID,   
                      UnitPrice)  
          VALUES (?, ?, ?, ?, ?)";  
$params1 = array( $orderId, $qty, $productId, $offerId, $price);  
$stmt1 = sqlsrv_query( $conn, $tsql1, $params1 );  
  
/* Set up and execute the second query. */  
$tsql2 = "UPDATE Production.ProductInventory   
          SET Quantity = (Quantity - ?)   
          WHERE ProductID = ?";  
$params2 = array($qty, $productId);  
$stmt2 = sqlsrv_query( $conn, $tsql2, $params2 );  
  
/* If both queries were successful, commit the transaction. */  
/* Otherwise, rollback the transaction. */  
if( $stmt1 && $stmt2 )  
{  
     sqlsrv_commit( $conn );  
     echo "Transaction was committed.\n";  
}  
else  
{  
     sqlsrv_rollback( $conn );  
     echo "Transaction was rolled back.\n";  
}  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt1);  
sqlsrv_free_stmt( $stmt2);  
sqlsrv_close( $conn);  
?>  

För att fokusera på transaktionsbeteende ingår inte viss rekommenderad felhantering i föregående exempel. För en produktionsapplikation rekommenderas att alla anrop till en sqlsrv-funktion kontrolleras för fel och hanteras därefter.

Note

Använd inte inbäddade Transact-SQL för att utföra transaktioner. Kör till exempel inte en instruktion med "BEGIN TRANSACTION" som en Transact-SQL-fråga för att inleda en transaktion. Det förväntade transaktionsbeteendet kan inte garanteras när inbäddade Transact-SQL används för att utföra transaktioner.