Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozpoczyna transakcję na określonym połączeniu. Obecna transakcja obejmuje wszystkie wypowiedzi na określonym połączeniu, które zostały wykonane po wymowie do sqlsrv_begin_transaction oraz przed jakimikolwiek połączeniami do sqlsrv_rollback lub sqlsrv_commit.
Note
Sterowniki Microsoft for PHP for SQL Server są domyślnie w trybie automatycznego zatwierdzania. Oznacza to, że wszystkie zapytania są automatycznie zatwierdzane po pomyślnym powodzeniu, chyba że zostały wyznaczone jako część jawnej transakcji przy użyciu sqlsrv_begin_transaction.
Note
Jeśli sqlsrv_begin_transaction zostanie wywołane po tym, jak transakcja została już zainicjowana na połączeniu, ale nie została ukończona przez wywołanie sqlsrv_commit lub sqlsrv_rollback, wywołanie zwraca fałszywy wynik i do kolekcji błędów dodaje się błąd Już w transakcji .
Syntax
sqlsrv_begin_transaction( resource $conn)
Parametry
$conn: Połączenie, z którym transakcja jest powiązana.
Wartość zwracana
Wartość boolowska: prawdziwa , jeśli transakcja została pomyślnie rozpoczęta. W przeciwnym razie – fałsz.
Example
Poniższy przykład wykonuje dwa zapytania w ramach transakcji. Jeśli oba zapytania zakończą się sukcesem, transakcja zostaje zatwierdzona. Jeśli któreś (lub oba) zapytań nie zaliczą, transakcja jest cofana do tyłu.
Pierwsze zapytanie w przykładzie wstawia nowe zamówienie sprzedażowe do tabeli Sales.SalesOrderDetail w bazie AdventureWorks. Zamówienie dotyczy pięciu jednostek produktu o ID produktu 709. Drugie zapytanie zmniejsza ilość zapasów produktu o ID 709 o pięć jednostek. Te zapytania są uwzględniane w transakcji, ponieważ oba muszą być pomyślne, aby baza danych dokładnie odzwierciedlała stan zamówień i dostępność produktów.
W tym przykładzie przyjęto założenie, że na komputerze lokalnym zainstalowano program SQL Server i bazę danych AdventureWorks . Wszystkie dane wyjściowe są zapisywane w konsoli, gdy przykład jest uruchamiany z wiersza polecenia.
<?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);
?>
Aby skupić się na zachowaniu transakcji, niektóre zalecane metody obsługi błędów nie zostały uwzględnione w powyższym przykładzie. W przypadku aplikacji produkcyjnej zaleca się, aby każde wywołanie funkcji sqlsrv zostało sprawdzone pod kątem błędów i odpowiednio obsłużone.
Note
Nie używaj osadzonych Transact-SQL do wykonywania transakcji. Na przykład nie wykonuj instrukcji z użyciem "BEGIN TRANSACTION" jako zapytania Transact-SQL do rozpoczęcia transakcji. Oczekiwane zachowanie transakcyjne nie może być gwarantowane przy użyciu wbudowanych Transact-SQL do realizacji transakcji.