다음을 통해 공유


커서 유형(PDO_SQLSRV 드라이버)

PHP 드라이버 다운로드

PDO_SQLSRV 드라이버를 사용하면 여러 커서 중 하나가 있는 스크롤 가능 결과 집합을 만들 수 있습니다.

PDO_SQLSRV 드라이버를 사용하여 커서를 지정하는 방법과 코드 샘플에 대한 자세한 내용은 PDO::prepare를 참조하세요.

PDO_SQLSRV 및 서버 쪽 커서

MICROSOFT Drivers for PHP for SQL Server 버전 3.0 이전에는 PDO_SQLSRV 드라이버를 사용하여 서버 쪽 정방향 전용 또는 정적 커서를 사용하여 결과 집합을 만들 수 있었습니다. MICROSOFT Drivers for PHP for SQL Server 버전 3.0부터는 키 집합 및 동적 커서도 사용할 수 있습니다.

PDO::prepare를 사용해서 다음 커서 형식 중 하나를 선택하여 서버 쪽 커서 형식을 나타낼 수 있습니다.

  • PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY

  • PDO::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_DYNAMIC

  • PDO::SQLSRV_CURSOR_STATIC

  • PDO::SQLSRV_CURSOR_KEYSET

PDO_SQLSRV 및 클라이언트 쪽 커서

클라이언트 쪽 커서는 MICROSOFT Drivers for PHP for SQL Server 버전 3.0에 추가되었으며, 이를 사용하여 전체 결과 집합을 메모리에 캐시할 수 있습니다. 한 가지 장점은 쿼리를 실행한 이후에 행 수를 사용할 수 있다는 점입니다.

클라이언트 쪽 커서는 중소 규모의 결과 집합에 사용해야 합니다. 큰 결과 집합에서는 서버 쪽 커서를 사용해야 합니다.

클라이언트 쪽 커서를 사용할 때 버퍼가 전체 결과 집합을 담을 만큼 충분히 크지 않은 경우 쿼리는 false를 반환합니다. 버퍼 크기는 PHP 메모리 한도까지 늘릴 수 있습니다.

PDO::setAttribute 또는 PDOStatement::setAttributePDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE 특성을 사용하여 결과 집합을 저장하는 버퍼의 크기를 구성할 수 있습니다. pdo_sqlsrv.client_buffer_max_kb_size(예: pdo_sqlsrv.client_buffer_max_kb_size = 1024)를 사용하여 php.ini 파일에 최대 버퍼 크기를 설정할 수도 있습니다.

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

참고 항목

커서 유형 지정 및 행 선택