Freigeben über


Cursortypen (PDO_SQLSRV-Treiber)

PHP-Treiber herunterladen

Mit dem PDO_SQLSRV-Treiber können Sie scrollbare Resultsets mit einem von mehreren Cursor erstellen.

Informationen zum Angeben eines Cursors mithilfe des PDO_SQLSRV-Treibers sowie Codebeispiele finden Sie unter PDO::prepare.

PDO_SQLSRV und serverseitige Cursor

Vor Version 3.0 von Microsoft-Treiber für PHP für SQL Server war es möglich, mit dem PDO_SQLSRV-Treiber ein Resultset mit einem serverseitigen Vorwärtscursor oder einem statischen Cursor zu erstellen. Ab Version 3.0 von Microsoft-Treiber für PHP für SQL Server sind auch Keyset- und dynamische Cursor verfügbar.

Mit PDO::prepare können Sie den Typ des serverseitigen Cursors angeben, indem Sie einen der folgenden Cursortypen auswählen:

  • PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY

  • PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL

Sie können einen dynamischen, statischen oder Keysetcursor anfordern, indem Sie PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL angeben und anschließend den geeigneten Wert an PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE übergeben. Die folgenden Werte können für serverseitige Cursor an PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE übergeben werden:

  • PDO::SQLSRV_CURSOR_DYNAMIC

  • PDO::SQLSRV_CURSOR_STATIC

  • PDO::SQLSRV_CURSOR_KEYSET

PDO_SQLSRV und clientseitige Cursor

Clientseitige Cursor wurden ab Version 3.0 von Microsoft-Treiber für PHP für SQL Server hinzugefügt. Mit ihnen kann ein komplettes Resultset im Arbeitsspeicher zwischengespeichert werden. Ein Vorteil besteht darin, dass die Zeilenanzahl nach dem Ausführen einer Abfrage verfügbar ist.

Clientseitige Cursor eignen sich für kleine bis mittelgroße Resultsets. Für große Resultsets sollten serverseitige Cursor verwendet werden.

Ist der Puffer bei einem clientseitigen Cursor nicht groß genug für ein komplettes Resultset, gibt die Abfrage FALSE zurück. Sie können die Puffergröße bis zur Grenze des PHP-Speichers erhöhen.

Die Größe des Puffers, der das Resultset enthält, kann mithilfe des Attributs PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE von PDO::setAttribute oder PDOStatement::setAttribute konfiguriert werden. Die maximale Puffergröße kann auch mit pdo_sqlsrv.client_buffer_max_kb_size (z. B. pdo_sqlsrv.client_buffer_max_kb_size = 1024) in der Datei „php.ini“ festgelegt werden.

Sie können einen clientseitigen Cursor mithilfe von PDO::prepare anfordern. Geben Sie dafür den Cursortyp PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL und anschließend PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED an.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie ein gepufferter Cursor angegeben wird:

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

Weitere Informationen

Festlegen eines Cursortyps und Zeilenauswahl