Condividi tramite


Tipi di cursore (driver PDO_SQLSRV)

Download del driver PHP

Il driver PDO_SQLSRV consente di creare set di risultati scorrevoli con uno dei diversi cursori disponibili.

Per informazioni su come specificare un cursore con il driver PDO_SQLSRV e per esempi di codice, vedere PDO::prepare.

PDO_SQLSRV e cursori lato server

Nelle versioni dei Driver Microsoft per PHP per SQL Server precedenti alla 3.0, il driver PDO_SQLSRV consente di creare un set di risultati con un cursore statico o forward-only lato server. A partire dalla versione 3.0 dei driver Microsoft per PHP per SQL Server, sono disponibili anche keyset e cursori dinamici.

È possibile indicare il tipo di cursore lato server usando PDO::prepare per selezionare uno dei tipi di cursore seguenti:

  • PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY

  • PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL

È possibile richiedere un cursore dinamico, statico o keyset specificando PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL e quindi passando il valore appropriato a PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE. I valori che è possibile passare a PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE per i cursori lato server sono i seguenti:

  • PDO::SQLSRV_CURSOR_DYNAMIC

  • PDO::SQLSRV_CURSOR_STATIC

  • PDO::SQLSRV_CURSOR_KEYSET

PDO_SQLSRV e cursori lato client

I cursori lato client sono stati aggiunti nella versione 3.0 dei driver Microsoft per PHP per SQL Server e consentono di memorizzare nella cache un intero set di risultati in memoria. Un vantaggio è rappresentato dal fatto che dopo l'esecuzione di una query è disponibile il numero delle righe.

È consigliabile usare i cursori lato client per set di risultati di piccole e medie dimensioni. Per set di risultati di grandi dimensioni, usare i cursori lato server.

Quando si usa un cursore lato client, se le dimensioni del buffer non sono sufficienti a contenere un intero set di risultati, una query restituirà false. Si possono aumentare le dimensioni del buffer fino al limite di memoria di PHP.

È possibile configurare le dimensioni del buffer contenente il set di risultati con l'attributo PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE di PDO::setAttribute o PDOStatement::setAttribute. Le dimensioni massime del buffer possono anche essere impostate nel file php.ini con pdo_sqlsrv.client_buffer_max_kb_size (ad esempio, pdo_sqlsrv.client_buffer_max_kb_size = 1024).

È possibile richiedere un cursore lato client con PDO::prepare, specificando il tipo di cursore PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL e quindi PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED.

Esempio

L'esempio seguente illustra come specificare un cursore con buffer.

<?php
$database = "AdventureWorks";
$server = "(local)";
$conn = new PDO( "sqlsrv:server=$server ; Database = $database", "", "");

$query = "select * from Person.ContactType";
$stmt = $conn->prepare( $query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->execute();
print $stmt->rowCount();

echo "\n";

while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){
   print "$row[Name]\n";
}
echo "\n..\n";

$row = $stmt->fetch( PDO::FETCH_BOTH, PDO::FETCH_ORI_FIRST );
print_r($row);

$row = $stmt->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_REL, 1 );
print "$row[Name]\n";

$row = $stmt->fetch( PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT );
print "$row[1]\n";

$row = $stmt->fetch( PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR );
print "$row[1]..\n";

$row = $stmt->fetch( PDO::FETCH_NUM, PDO::FETCH_ORI_ABS, 0 );
print_r($row);

$row = $stmt->fetch( PDO::FETCH_NUM, PDO::FETCH_ORI_LAST );
print_r($row);
?>

Vedi anche

Specifica di un tipo di cursore e selezione di righe