Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Belirli bir bağlantıda işlem başlatır. Mevcut işlem, sqlsrv_begin_transaction çağrısından sonra ve sqlsrv_rollback veya sqlsrv_commit çağrılarından önce gerçekleştirilen belirtilen bağlantıdaki tüm ifaları içerir.
Note
SQL Server için PHP için Microsoft Sürücüleri varsayılan olarak otomatik commit modundadır. Bu, sqlsrv_begin_transaction kullanılarak açık bir işlemin parçası olarak belirlenmediği sürece tüm sorguların otomatik olarak başarı üzerine işlendiği anlamına gelir.
Note
Eğer sqlsrv_begin_transaction , bağlantı üzerinde işlem başlatıldıktan sonra çağrılır ancak sqlsrv_commit veya sqlsrv_rollback çağrılarak tamamlanmamışsa, çağrı yanlış döner ve hata koleksiyonuna Zaten İşlemde hatası eklenir.
Syntax
sqlsrv_begin_transaction( resource $conn)
Parametreler
$conn: İşlemin ilişkilendirildiği bağlantı.
Dönüş Değeri
Bir Boolean değeri: işlem başarıyla başlatıldıysa doğrudur . Aksi takdirde, yanlış.
Example
Aşağıdaki örnek, bir işlemin parçası olarak iki sorgu yürütülür. Her iki sorgu da başarılı olursa, işlem gerçekleşir. Eğer sorgulardan biri (veya her ikisi) başarısız olursa, işlem geri alınır.
Örnekteki ilk sorgu, AdventureWorks veritabanındaki Sales.SalesOrderDetail tablosuna yeni bir satış siparişi ekler. Sipariş, ürün ID'si 709 olan beş ünite içindir. İkinci sorgu, ürün ID 709'un envanter miktarını beş birim azaltıyor. Bu sorgular, veritabanının siparişlerin durumunu ve ürün kullanılabilirliğini doğru şekilde yansıtabilmesi için her iki sorgunun da başarılı olması gerektiği için işlem içinde dahil edilir.
Örnekte SQL Server ve AdventureWorks veritabanının yerel bilgisayarda yüklü olduğu varsayılır. Örnek komut satırından çalıştırıldığında tüm çıkış konsola yazılır.
<?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);
?>
İşlem davranışına odaklanmak amacıyla, yukarıdaki örnekte önerilen bazı hata işleme bölümleri dahil edilmemiştir. Bir üretim uygulaması için, sqlsrv fonksiyonuna yapılan herhangi bir çağrının hata açısından kontrol edilmesi ve buna göre ele alınması önerilir.
Note
İşlemleri gerçekleştirmek için eklenmiş Transact-SQL kullanmayın. Örneğin, bir işlemi başlatmak için Transact-SQL sorgusu olarak "BEGIN TRANSACTION" içeren bir deyim yürütmeyin. Beklenen işlemsel davranış, gömülü Transact-SQL işlemler yaparken garanti edilemez.