Megosztás:


Közvetlen utasítás végrehajtása és előkészített utasítás végrehajtása a PDO_SQLSRV illesztőprogramban

PHP-illesztőprogram letöltése

Ez a témakör a PDO::SQLSRV_ATTR_DIRECT_QUERY attribútum használatát tárgyalja, amely közvetlen utasítás-végrehajtást biztosít az előkészített utasítás-végrehajtás alapértelmezett alternatívájaként. Az előkészített utasítás használata jobb teljesítményt eredményezhet, ha az utasítást többször hajtja végre paraméterkötés használatával.

Megjegyzések

Ha közvetlenül a kiszolgálóra szeretne küldeni egy Transact-SQL utasítást anélkül, hogy az illesztőprogram utasítás-előkészítést végzett volna, beállíthatja az OEM::SQLSRV_ATTR_DIRECT_QUERY attribútumot az OEM::setAttribute (vagy az oem::__construct)-nak átadott illesztőprogramként, vagy amikor meghívja az OEM::p repare parancsot. Alapértelmezés szerint a PDO::SQLSRV_ATTR_DIRECT_QUERY értéke Hamisra van állítva (az előkészített utasítások végrehajtását használja).

Ha PDO::query parancsot használ, érdemes lehet közvetlen végrehajtást végeznie. Az OEM::query hívása előtt hívja meg az OEM::setAttribute parancsot , és állítsa be az OEM::SQLSRV_ATTR_DIRECT_QUERY értéke Igaz értékre. Minden egyes PDO::query hívás végrehajtható a PDO::SQLSRV_ATTR_DIRECT_QUERY más beállításával.

Ha PDO::p repare és PDOStatement::execute parancsot használ egy lekérdezés többszöri végrehajtásához kötött paraméterekkel, az előkészített utasítás-végrehajtás optimalizálja az ismétlődő lekérdezés végrehajtását. Ebben az esetben hívja meg a PDO::prepare parancsot, és állítsa a driver opció tömbparamétereként megadott PDO::SQLSRV_ATTR_DIRECT_QUERY értéket False-ra. Szükség esetén az előkészített utasításokat úgy hajthatja végre, hogy a PDO::SQLSRV_ATTR_DIRECT_QUERY hamis értékre van állítva.

Az oem::p repare hívása után az oem::SQLSRV_ATTR_DIRECT_QUERY értéke nem módosítható az előkészített lekérdezés végrehajtásakor.

Ha egy lekérdezéshez az előző lekérdezésben beállított környezet szükséges, hajtsa végre a lekérdezéseket a PDO::SQLSRV_ATTR_DIRECT_QUERY értékét Igazra állítva. Ha például ideiglenes táblákat használ a lekérdezésekben, a PDO::SQLSRV_ATTR_DIRECT_QUERY értékét True-ra kell állítani.

Az alábbi példa azt mutatja, hogy amikor szükség van egy előző utasítás környezetére, be kell állítania a PDO::SQLSRV_ATTR_DIRECT_QUERY értékét igazra. Ez a minta ideiglenes táblákat használ, amelyek csak a lekérdezések közvetlen végrehajtásakor érhetők el a program későbbi utasításai számára.

Megjegyzés:

Ha a lekérdezés egy tárolt eljárás meghívására szolgál, és ebben a tárolt eljárásban ideiglenes táblákat használ, használja helyette az OEM::exec parancsot.

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

Lásd még:

Programozási útmutató a Microsoft által az SQL Serverhez készült PHP-illesztőprogramokhoz