sqlsrv_commit

Pobieranie sterownika PHP

Potwierdza bieżącą transakcję na określonym połączeniu i przywraca połączenie do trybu automatycznego zatwierdzania. 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_commit zostanie wywołane na połączeniu, które nie jest w aktywnej transakcji i zostało zainicjowane przez sqlsrv_begin_transaction, wywołanie zwraca fałszywe i do kolekcji błędów dodaje się błąd Not in Transaction .

Syntax

  
sqlsrv_commit( resource $conn )  

Parametry

$conn: Połączenie, na którym transakcja jest aktywna.

Wartość zwracana

Wartość boolowska: prawdziwa , jeśli transakcja została pomyślnie dokonana. 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, w poprzednim przykładzie nie uwzględniono niektórych zalecanych metod obsługi błędów. 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.