Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.