Bagikan melalui


Eksekusi Pernyataan Langsung dan Eksekusi Pernyataan yang Disiapkan di Driver PDO_SQLSRV

Unduh driver PHP

Topik ini membahas penggunaan atribut PDO::SQLSRV_ATTR_DIRECT_QUERY untuk menentukan eksekusi pernyataan langsung alih-alih default, yang disiapkan eksekusi pernyataan. Menggunakan pernyataan yang disiapkan dapat menghasilkan performa yang lebih baik jika pernyataan dijalankan lebih dari sekali menggunakan pengikatan parameter.

Keterangan

Jika Anda ingin mengirim pernyataan Transact-SQL langsung ke server tanpa persiapan pernyataan oleh driver, Anda dapat mengatur atribut PDO::SQLSRV_ATTR_DIRECT_QUERY dengan PDO::setAttribute (atau sebagai opsi driver yang diteruskan ke PDO::__construct) atau ketika Anda memanggil PDO::p repare. Secara default, nilai PDO::SQLSRV_ATTR_DIRECT_QUERY adalah False (gunakan eksekusi pernyataan yang disiapkan).

Jika Anda menggunakan PDO::query, Anda mungkin ingin eksekusi langsung. Sebelum memanggil PDO::query, panggil PDO::setAttribute dan atur PDO::SQLSRV_ATTR_DIRECT_QUERY ke True. Setiap panggilan ke PDO::query dapat dijalankan dengan pengaturan yang berbeda untuk PDO::SQLSRV_ATTR_DIRECT_QUERY.

Jika Anda menggunakan PDO::p repare dan PDOStatement::execute untuk menjalankan kueri beberapa kali menggunakan parameter terikat, eksekusi pernyataan yang disiapkan mengoptimalkan eksekusi kueri berulang. Dalam situasi ini, panggil PDO::p repare dengan PDO::SQLSRV_ATTR_DIRECT_QUERY diatur ke False dalam parameter array opsi driver. Jika perlu, Anda dapat menjalankan pernyataan yang disiapkan dengan PDO::SQLSRV_ATTR_DIRECT_QUERY diatur ke False.

Setelah Anda memanggil PDO::p repare, nilai PDO::SQLSRV_ATTR_DIRECT_QUERY tidak dapat berubah saat menjalankan kueri yang disiapkan.

Jika kueri memerlukan konteks yang diatur dalam kueri sebelumnya, jalankan kueri Anda dengan PDO::SQLSRV_ATTR_DIRECT_QUERY diatur ke True. Misalnya, jika Anda menggunakan tabel sementara dalam kueri Anda, PDO::SQLSRV_ATTR_DIRECT_QUERY harus diatur ke True.

Sampel berikut menunjukkan bahwa ketika konteks dari pernyataan sebelumnya diperlukan, Anda perlu mengatur PDO::SQLSRV_ATTR_DIRECT_QUERY ke True. Sampel ini menggunakan tabel sementara, yang hanya tersedia untuk pernyataan berikutnya dalam program Anda saat kueri dijalankan secara langsung.

Catatan

Jika kueri memanggil prosedur tersimpan dan tabel sementara digunakan dalam prosedur tersimpan ini, gunakan PDO::exec sebagai gantinya.

<?php  
   $conn = new PDO('sqlsrv:Server=(local)', '', '');  
   $conn->setAttribute(constant('PDO::SQLSRV_ATTR_DIRECT_QUERY'), true);  
  
   $stmt1 = $conn->query("DROP TABLE #php_test_table");  
  
   $stmt2 = $conn->query("CREATE TABLE #php_test_table ([c1_int] int, [c2_int] int)");  
  
   $v1 = 1;  
   $v2 = 2;  
  
   $stmt3 = $conn->prepare("INSERT INTO #php_test_table (c1_int, c2_int) VALUES (:var1, :var2)");  
  
   if ($stmt3) {  
      $stmt3->bindValue(1, $v1);  
      $stmt3->bindValue(2, $v2);  
  
      if ($stmt3->execute())  
         echo "Execution succeeded\n";       
      else  
         echo "Execution failed\n";  
   }  
   else  
      var_dump($conn->errorInfo());  
  
   $stmt4 = $conn->query("DROP TABLE #php_test_table");  
?>  

Lihat Juga

Panduan Pemrograman untuk Driver Microsoft untuk PHP untuk SQL Server