Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Potvrzuje aktuální transakci na specifikovaném spojení a vrací spojení do režimu automatického potvrzení. Aktuální transakce zahrnuje všechny příkazy na specifikovaném spojení, které byly provedeny po volání na sqlsrv_begin_transaction a před jakýmikoli voláními na sqlsrv_rollback nebo sqlsrv_commit.
Note
Microsoft ovladače pro PHP pro SQL Server jsou ve výchozím nastavení v režimu automatického potvrzení. To znamená, že všechny dotazy jsou automaticky potvrzeny při úspěchu, pokud nebyly určeny jako součást explicitní transakce pomocí sqlsrv_begin_transaction.
Note
Pokud je sqlsrv_commit vyvolán na spojení, které není v aktivní transakci a bylo iniciováno pomocí sqlsrv_begin_transaction, volání vrátí false a do sbírky chyb je přidána chyba Not in Transaction .
Syntax
sqlsrv_commit( resource $conn )
Parametry
$conn: Spojení, na kterém je transakce aktivní.
Návratová hodnota
Booleovská hodnota: pravdivá , pokud byla transakce úspěšně provedena. Jinak nepravda.
Example
Níže uvedený příklad provádí dva dotazy jako součást transakce. Pokud jsou oba dotazy úspěšné, transakce je potvrzena. Pokud některý (nebo oba) dotazy selžou, transakce se vrátí zpět.
První dotaz v příkladu vkládá novou prodejní objednávku do tabulky Sales.SalesOrderDetail v databázi AdventureWorks. Objednávka je na pět kusů produktu, který má produktové ID 709. Druhý dotaz snižuje množství zásob produktu s ID 709 o pět jednotek. Tyto dotazy jsou zahrnuty v transakci, protože oba dotazy musí být úspěšné, aby databáze přesně odrážela stav objednávek a dostupnost produktů.
Příklad předpokládá, že SQL Server a databáze AdventureWorks jsou nainstalovány v místním počítači. Při spuštění příkladu z příkazového řádku se veškerý výstup zapíše do konzoly.
<?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);
?>
Pro účely zaměření na chování transakcí není v předchozím příkladu zahrnuto některé doporučené zpracování chyb. Pro produkční aplikaci se doporučuje kontrolovat jakékoli volání funkce sqlsrv na chyby a být podle toho zpracováno.
Note
Nepoužívejte vložené Transact-SQL k provádění transakcí. Například nespouštět příkaz s "BEGIN TRANSACTION" jako Transact-SQL dotaz pro zahájení transakce. Očekávané transakční chování nelze zaručit při použití vložených Transact-SQL k provádění transakcí.