sqlsrv_commit

Descarregar o driver PHP

Compromete a transação atual na ligação especificada e devolve a ligação ao modo de auto-commit. A transação atual inclui todos os extratos da ligação especificada que foram executados após a chamada para sqlsrv_begin_transaction e antes de quaisquer chamadas para sqlsrv_rollback ou sqlsrv_commit.

Note

Os drivers da Microsoft para PHP para SQL Server estão em modo de auto-commit por defeito. Isto significa que todas as consultas são automaticamente comprometidas após o sucesso, a menos que tenham sido designadas como parte de uma transação explícita usando sqlsrv_begin_transaction.

Note

Se sqlsrv_commit for chamada numa ligação que não está numa transação ativa e que foi iniciada com sqlsrv_begin_transaction, a chamada retorna falsa e um erro Não na Transação é adicionado à coleção de erros.

Syntax

  
sqlsrv_commit( resource $conn )  

Parâmetros

$conn: A ligação onde a transação está ativa.

Valor de retorno

Um valor booleano: verdadeiro se a transação foi confirmada com sucesso. Caso contrário, falso.

Example

O exemplo abaixo executa duas consultas como parte de uma transação. Se ambas as consultas forem bem-sucedidas, a transação é confirmada. Se uma (ou ambas) das consultas falharem, a transação é revertida.

A primeira consulta no exemplo insere uma nova ordem de venda na tabela Sales.SalesOrderDetail da base de dados AdventureWorks. A encomenda é para cinco unidades do produto que tem o ID de produto 709. A segunda consulta reduz a quantidade de inventário do produto ID 709 em cinco unidades. Estas consultas são incluídas numa transação porque ambas as consultas têm de ser bem-sucedidas para que a base de dados reflita com precisão o estado das encomendas e a disponibilidade do produto.

O exemplo assume que o SQL Server e a base de dados AdventureWorks estão instalados no computador local. Toda a saída é escrita para a consola quando o exemplo é executado a partir da linha de comandos.

<?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);  
?>  

Para efeitos de foco no comportamento das transações, alguma gestão recomendada de erros não está incluída no exemplo anterior. Para uma aplicação de produção, recomenda-se que qualquer chamada a uma função sqlsrv seja verificada quanto a erros e tratada em conformidade.

Note

Não utilize Transact-SQL embutidos para realizar transações. Por exemplo, não execute uma instrução com "INICIAR TRANSAÇÃO" como consulta Transact-SQL para iniciar uma transação. O comportamento transacional esperado não pode ser garantido ao utilizar Transact-SQL embutidos para realizar transações.