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.
Zahajuje transakci na určeném spojení. 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_begin_transaction volán poté, co byla transakce již zahájena na spojení, ale není dokončena voláním sqlsrv_commit nebo sqlsrv_rollback, volání vrátí falešnou a do sbírky chyb je přidána chyba Již v transakci .
Syntax
sqlsrv_begin_transaction( resource $conn)
Parametry
$conn: Spojení, se kterým je transakce spojena.
Návratová hodnota
Booleovská hodnota: pravdivá , pokud byla transakce úspěšně zahájena. 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 uvedené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í.