Bagikan melalui


sqlsrv_commit

Unduh driver PHP

Menerapkan transaksi saat ini pada koneksi yang ditentukan dan mengembalikan koneksi ke mode penerapan otomatis. Transaksi saat ini mencakup semua pernyataan pada koneksi yang ditentukan yang dijalankan setelah panggilan ke sqlsrv_begin_transaction dan sebelum panggilan ke sqlsrv_rollback atau sqlsrv_commit.

Catatan

Driver Microsoft untuk PHP untuk SQL Server berada dalam mode penerapan otomatis secara default. Ini berarti bahwa semua kueri secara otomatis diterapkan setelah berhasil kecuali telah ditetapkan sebagai bagian dari transaksi eksplisit dengan menggunakan sqlsrv_begin_transaction.

Catatan

Jika sqlsrv_commit dipanggil pada koneksi yang tidak berada dalam transaksi aktif dan yang dimulai dengan sqlsrv_begin_transaction, panggilan mengembalikan false dan kesalahan Tidak dalam Transaksi ditambahkan ke kumpulan kesalahan.

Sintaks

  
sqlsrv_commit( resource $conn )  

Parameter

$conn: Koneksi tempat transaksi aktif.

Tampilkan Nilai

Nilai Boolean: true jika transaksi berhasil dilakukan. Jika tidak, salah.

Contoh

Contoh di bawah ini menjalankan dua kueri sebagai bagian dari transaksi. Jika kedua kueri berhasil, transaksi dilakukan. Jika (atau kedua) kueri gagal, transaksi akan digulung balik.

Kueri pertama dalam contoh menyisipkan pesanan penjualan baru ke dalam tabel Sales.SalesOrderDetail database AdventureWorks. Pesanan tersebut untuk lima unit produk yang memiliki ID produk 709. Kueri kedua mengurangi kuantitas inventaritas ID produk 709 sebanyak lima unit. Kueri ini disertakan dalam transaksi karena kedua kueri harus berhasil bagi database untuk secara akurat mencerminkan status pesanan dan ketersediaan produk.

Contoh mengasumsikan bahwa SQL Server dan database AdventureWorks diinstal di komputer lokal. Semua output ditulis ke konsol saat contoh dijalankan dari baris perintah.

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

Untuk tujuan berfokus pada perilaku transaksi, beberapa penanganan kesalahan yang direkomendasikan tidak termasuk dalam contoh sebelumnya. Untuk aplikasi produksi, disarankan agar setiap panggilan ke fungsi sqlsrv diperiksa kesalahannya dan ditangani dengan sesuai.

Catatan

Jangan gunakan Transact-SQL yang disematkan untuk melakukan transaksi. Misalnya, jangan jalankan pernyataan dengan "BEGIN TRANSACTION" sebagai kueri Transact-SQL untuk memulai transaksi. Perilaku transaksi yang diharapkan tidak dapat dijamin saat menggunakan Transact-SQL yang disematkan untuk melakukan transaksi.

Lihat Juga

Referensi API Driver SQLSRV

Cara: Melakukan Transaksi

Gambaran umum Driver Microsoft untuk PHP untuk SQL Server