sqlsrv_rollback

Restaure la transaction actuelle sur la connexion spécifiée et retourne la connexion en mode de validation automatique. La transaction actuelle comprend toutes les instructions de la connexion spécifiée, qui ont été exécutées après l'appel à sqlsrv_begin_transaction et avant les appels à sqlsrv_rollback ou sqlsrv_commit.

Cc296176.note(fr-fr,SQL.90).gifRemarque :
Le Pilote SQL Server pour PHP est en mode de validation automatique par défaut. En d'autres termes, toutes les requêtes sont automatiquement validées en cas de réussite, à moins qu'elles ne soient désignées dans le cadre d'une transaction explicite via sqlsrv_begin_transaction.

Cc296176.note(fr-fr,SQL.90).gifRemarque :
Si sqlsrv_rollback est appelé sur une connexion qui n'est pas une transaction active commencée avec sqlsrv_begin_transaction, l'appel retourne false et une erreur de type Not in Transaction est ajoutée à la collection d'erreurs.

Syntaxe

sqlsrv_rollback( resource $conn)

Paramètres

$conn : connexion sur laquelle la transaction est active.

Valeur de retour

Valeur booléenne : true si la transaction a correctement été restaurée. Sinon, false.

Exemple

L'exemple suivant exécute deux requêtes dans le cadre d'une transaction. Si les deux requêtes réussissent, la transaction est validée. En cas d'échec de l'une ou l'autre des requêtes (ou les deux), la transaction est restaurée.

La première requête de l'exemple insère une nouvelle commande client dans la table Sales.SalesOrderDetail de la base de données AdventureWorks. La commande porte sur cinq unités du produit dont l'ID est 709. La seconde requête réduit de cinq unités la quantité de produits dont l'ID est 709 dans l'inventaire. Ces requêtes sont incluses dans une transaction, car les deux requêtes doivent être réussies pour permettre à la base de données de refléter avec précision l'état des commandes et la disponibilité des produits.

L'exemple suppose que SQL Server et la base de données AdventureWorks sont installés sur l'ordinateur local. Toutes les données de sortie sont écrites dans la console lorsque l'exemple est exécuté à partir de la ligne de commande.

<?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 executee 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);
?>

Pour mieux souligner le comportement de la transaction, certaines recommandations en matière de gestion des erreurs ne sont pas incluses dans l'exemple précédent. Pour une application de production, il est recommandé de rechercher les erreurs générées lors d'appels à une fonction sqlsrv et de les gérer en conséquence.

Cc296176.note(fr-fr,SQL.90).gifRemarque :
N'utilisez pas le langage Transact-SQL incorporé pour effectuer des transactions. Par exemple, n'exécutez pas d'instruction avec « BEGIN TRANSACTION » en tant que requête Transact-SQL pour commencer une transaction. Le comportement transactionnel attendu ne peut pas être garanti lorsque vous utilisez le langage Transact-SQL incorporé pour effectuer des transactions.

Voir aussi

Tâches

Procédure : effectuer des transactions

Autres ressources

Référence de l'API (Pilote SQL Server pour PHP)
Introduction au pilote SQL Server pour PHP