PDOStatement::closeCursor — 명령문을 다시 실행할 수 있도록 커서를 닫습니다. (PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)
bool PDOStatement::closeCursor ( void )
PDOStatement::closeCursor()는 다른 SQL 문을 실행할 수 있도록 데이터베이스 서비스에 대한 연결을 해제하지만 해당 문은 다시 실행할 수 있는 상태로 둡니다.
이 방법은 마지막으로 실행된 PDOStatement 개체에 아직 페치되지 않은 행이 있는 경우 다른 PDOStatement 개체 실행을 지원하지 않는 데이터베이스 드라이버에 매우 유용합니다. 데이터베이스 드라이버에 이 제한이 적용되는 경우 순서가 잘못된 오류가 발생할 수 있습니다.
PDOStatement::closeCursor()는 선택적 드라이버별 메서드(가장 효율적)로 구현되거나 드라이버별 기능이 없을 때 일반 PDO 폴백으로 구현됩니다. 일반적인 대체 의미 체계는 다음 PHP 코드와 동일합니다.
<?phpdo { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) break;} while (true);?>
성공하면 TRUE를, 실패하면 FALSE를 반환합니다.
다음 예에서 $stmt PDOStatement 개체는 여러 행을 반환하지만 애플리케이션은 첫 번째 행만 가져오고 PDOStatement 개체는 가져온 행이 없는 상태로 유지됩니다. 애플리케이션이 모든 데이터베이스 드라이버에서 정상적으로 실행될 수 있도록 하기 위해 $stmt는 $otherStmt PDOStatement 개체를 실행하기 전에 PDOStatement::closeCursor()를 한 번 호출합니다.
<?php/* PDOStatement 객체 생성 */$stmt = $dbh->prepare('SELECT foo FROM bar');/* 두 번째 PDOStatement 객체 생성 */$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');/* 첫 번째 문 실행*/$stmt->execute();/* 결과 집합에서 첫 번째 행만 가져옵니다. */$stmt->fetch();/* 일부 드라이버에서는 closeCursor()에 대한 다음 호출이 필요할 수 있습니다. */$stmt->closeCursor();/* 이제 다음을 실행할 수 있습니다. 두 번째 명령문*/$otherStmt->execute();?>