sqlsrv_commit
Valide 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.
Remarque : |
---|
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. |
Remarque : |
---|
Si sqlsrv_commit est appelé sur une connexion qui n'est pas une transaction active et qui a été 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_commit( resource $conn )
Paramètres
$conn : connexion sur laquelle la transaction est active.
Valeur de retour
Valeur booléenne : true si la transaction a été validée. Sinon, false.
Exemple
L'exemple ci-dessous 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 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);
?>
Pour mieux souligner le comportement de la transaction, certaines recommandations en matière de gestion des erreurs ne sont pas incluses dans l'exemple ci-dessus. 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.
Remarque : |
---|
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