PDO_SQLSRV Sürücüsünde Doğrudan Deyim Yürütme ve Hazırlanmış Deyim Yürütme

PHP sürücüsünü indirme

PDO::SQLSRV_ATTR_DIRECT_QUERY özniteliğinin, varsayılan olan hazırlanan deyim yürütme yerine doğrudan deyim yürütmesini belirtmek için kullanımı açıklanmaktadır. Deyimin parametre bağlaması kullanılarak birden çok kez yürütülmesi durumunda hazırlanmış bir deyimin kullanılması daha iyi performansa neden olabilir.

Açıklamalar

Bir Transact-SQL deyimini sürücü tarafından hazırlık yapılmadan doğrudan sunucuya göndermek istiyorsanız, PDO::SQLSRV_ATTR_DIRECT_QUERY özniteliğini PDO::setAttribute ile (ya da PDO::__construct'a geçirilen bir sürücü seçeneği olarak) veya PDO::prepare çağrısı yaptığınızda ayarlayabilirsiniz. Varsayılan olarak, PDO::SQLSRV_ATTR_DIRECT_QUERY değeri False'tur (hazırlanmış deyim yürütmeyi kullanın).

PDO::query kullanıyorsanız, doğrudan yürütme isteyebilirsiniz. PDO::query'yi çağırmadan önce PDO::setAttribute öğesini çağırıp PDO::SQLSRV_ATTR_DIRECT_QUERY değerini True olarak ayarlayın. PDO::query'ye yapılan her çağrı PDO::SQLSRV_ATTR_DIRECT_QUERY için farklı bir ayar ile yürütülebilir.

Bağlı parametreleri kullanarak bir sorguyu birden çok kez yürütmek için PDO::p repare ve PDOStatement::execute kullanırsanız, hazırlanan deyim yürütme yinelenen sorgunun yürütülmesini iyileştirir. Bu durumda, sürücü seçenekleri dizi parametresinde PDO::SQLSRV_ATTR_DIRECT_QUERY'yi False olarak belirleyerek PDO::prepare çağırın. Gerektiğinde, prepared statements'i PDO::SQLSRV_ATTR_DIRECT_QUERY 'False' olarak ayarlayarak yürütebilirsiniz.

PDO::p repare çağrısı yaptıktan sonra, hazırlanan sorgu yürütülürken PDO::SQLSRV_ATTR_DIRECT_QUERY değeri değiştirilemez.

Bir sorgu önceki sorguda ayarlanan bağlamı gerektiriyorsa, PDO::SQLSRV_ATTR_DIRECT_QUERY true olarak ayarlanmış sorgularınızı yürütebilirsiniz. Örneğin, sorgularınızda geçici tablolar kullanıyorsanız, PDO::SQLSRV_ATTR_DIRECT_QUERY True olarak ayarlanmalıdır.

Aşağıdaki örnek, önceki bir deyimin bağlamı gerektiğinde PDO::SQLSRV_ATTR_DIRECT_QUERY değerini True olarak ayarlamanız gerektiğini gösterir. Bu örnek, yalnızca sorgular doğrudan yürütülürken programınızdaki sonraki deyimler için kullanılabilen geçici tabloları kullanır.

Uyarı

Sorgu bir saklı yordamı çağırmak içinse ve bu saklı yordamda geçici tablolar kullanılıyorsa, bunun yerine PDO::exec kullanın.

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

Ayrıca Bkz.

SQL Server için PHP için Microsoft Sürücüleri Programlama Kılavuzu