(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor — 關(guān)閉游標,使語(yǔ)句能再次被執行。
PDOStatement::closeCursor() 釋放到數據庫服務(wù)的連接,以便發(fā)出其他 SQL 語(yǔ)句,但使語(yǔ)句處于一個(gè)可以被再次執行的狀態(tài)。
當上一個(gè)執行的 PDOStatement 對象仍有未取行時(shí),此方法對那些不支持再執行一個(gè) PDOStatement 對象的數據庫驅動(dòng)非常有用。 如果數據庫驅動(dòng)受此限制,則可能出現失序錯誤的問(wèn)題。
PDOStatement::closeCursor() 要么是一個(gè)可選驅動(dòng)的特有方法(效率最高)來(lái)實(shí)現,要么是在沒(méi)有驅動(dòng)特定的功能時(shí)作為一般的PDO 備用來(lái)實(shí)現。一般的備用語(yǔ)義上與下面的 PHP 代碼相同:
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
成功時(shí)返回 true
, 或者在失敗時(shí)返回 false
。
示例 #1 一個(gè) PDOStatement::closeCursor() 的例子
在下面例子中,$stmt PDOStatement 對象返回多行,但應用程序只取第一行,讓 PDOStatement 對象處于一個(gè)有未取行的狀態(tài)。為確保應用程序對所有數據庫驅動(dòng)都能正常運行,在執行 $otherStmt PDOStatement 對象前,$stmt 調用一次 PDOStatement::closeCursor() 。
<?php
/* 創(chuàng )建一個(gè) PDOStatement 對象 */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* 創(chuàng )建第二個(gè) PDOStatement 對象 */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* 執行第一條語(yǔ)句 */
$stmt->execute();
/* 從結果集中只取出第一行 */
$stmt->fetch();
/* The following call to closeCursor() may be required by some drivers */
$stmt->closeCursor();
/* 現在可以執行第二條語(yǔ)句了 */
$otherStmt->execute();
?>