Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A megadott kapcsolaton végrehajtja a jelenlegi tranzakciót, majd visszaállítja az automatikus commitációs módba. A jelenlegi tranzakció tartalmazza az összes megadott kapcsolaton lévő utasítást, amelyet a sqlsrv_begin_transaction-re való hívás után, illetve a sqlsrv_rollback vagy sqlsrv_commit-re való hívások előtt hajtottak végre.
Note
A Microsoft Drivers for PHP for SQL Server alapértelmezetten automatikus commitálás módban van. Ez azt jelenti, hogy a rendszer minden lekérdezést automatikusan véglegesíteni fog a sikeres végrehajtáskor, kivéve, ha azokat explicit tranzakció részeként jelölték ki sqlsrv_begin_transaction használatával.
Note
Ha sqlsrv_commit olyan kapcsolaton hívják, amely nem aktív tranzakcióban van, és amelyet sqlsrv_begin_transaction-vel indítottak, a hívás hamisat eredményez, és egy Nem tranzakcióban hiba kerül a hibagyűjteményhez.
Syntax
sqlsrv_commit( resource $conn )
Paraméterek
$conn: Az a kapcsolat, amelyen a tranzakció aktív.
Visszaadott érték
Egy Boole-érték: igaz , ha a tranzakciót sikeresen elvégezték. Ellenkező esetben hamis.
Example
Az alábbi példa két lekérdezést hajt végre egy tranzakció részeként. Ha mindkét lekérdezés sikeres, a tranzakció elkötelezett. Ha bármelyik (vagy mindkettő) lekérdezés megbukik, a tranzakciót visszafordítják.
A példa első lekérdezése új értékesítési megrendelést helyez be az AdventureWorks adatbázis Sales.SalesOrderDetail táblájába. A rendelés öt egységre vonatkozik, amelyek termékazonosítója 709. A második lekérdezés öt egységgel csökkenti a 709-es termék azonosítójának készletmennyiségét. Ezek a lekérdezések belekerülnek egy tranzakcióba, mert mindkét lekérdezésnek sikeresnek kell lennie ahhoz, hogy az adatbázis pontosan tükrözze a megrendelések állapotát és a termékelérhetőséget.
A példa feltételezi, hogy az SQL Server és az AdventureWorks adatbázis telepítve van a helyi számítógépen. A rendszer minden kimenetet a konzolra ír, amikor a példa a parancssorból fut.
<?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);
?>
A tranzakciós viselkedésre való fókusz érdekében néhány javasolt hibakezelés nem szerepel az előző példában. Egy gyártási alkalmazás esetén ajánlott, hogy bármely sqlsrv függvény hívását ellenőrizze hibák után és ennek megfelelően kezelje.
Note
Ne használjon beágyazott Transact-SQL tranzakciók végrehajtásához. Például ne hajtsa végre a "BEGIN TRANSACTION" utasítást Transact-SQL lekérdezésként a tranzakció elindításához. A várható tranzakciós viselkedés nem garantálható, ha beágyazott Transact-SQL használunk tranzakciók végrehajtására.