Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер PDO_SQLSRV позволяет создавать прокручиваемые результаты с помощью одного из нескольких курсоров.
Сведения о том, как указать курсор с помощью драйвера PDO_SQLSRV, а также примеры кода см. в PDO::prepare.
PDO_SQLSRV и курсоры на стороне сервера
В версиях Microsoft Drivers for PHP for SQL Server до 3.0 драйвер PDO_SQLSRV позволял создавать результирующий набор с однопроходным курсором только вперёд на стороне сервера или статическим курсором. Начиная с версии 3.0 драйверов Майкрософт для PHP для SQL Server, набор ключей и динамические курсоры также доступны.
Вы можете указать тип серверного курсора, используя PDO::prepare для выбора одного из следующих типов курсора:
PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLYPDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
Чтобы запросить динамический, статический курсор или курсор с набором ключей, укажите PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL и передайте соответствующее значение в PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE. Для курсоров на стороне сервера в PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE можно передать следующие значения:
PDO::SQLSRV_CURSOR_DYNAMICPDO::SQLSRV_CURSOR_STATICPDO::SQLSRV_CURSOR_KEYSET
PDO_SQLSRV и курсоры на стороне клиента
Курсоры на стороне клиента были добавлены в версии 3.0 драйверов Майкрософт для PHP для SQL Server и позволяют кэшировать весь результирующий набор в памяти. Одним из их преимуществ является то, что после выполнения запроса доступно количество строк.
Клиентские курсоры следует использовать для небольших и средних наборов результатов. Для больших наборов результатов следует использовать курсоры на стороне сервера.
При использовании курсора на стороне клиента запрос будет возвращать значение false, если буфер недостаточно велик для хранения полного результирующего набора. Вы можете увеличить размер этого буфера вплоть до максимального объема памяти PHP.
Размер буфера для результирующего набора можно увеличить с помощью атрибута PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE в PDO::setAttribute или PDOStatement::setAttribute. Также максимальный размер буфера можно задать в файле php.ini параметром pdo_sqlsrv.client_buffer_max_kb_size (например, pdo_sqlsrv.client_buffer_max_kb_size = 1024).
Вы можете запросить курсор на стороне клиента с помощью PDO::prepare, указав тип курсора PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, а затем указать PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED.
Пример
В следующем примере показано, как указать буферизованный курсор.
<?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);
?>