PDOStatement::closeCursor
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor —
Closes the cursor, enabling the statement to be executed again
Descrição
public PDOStatement::closeCursor():
bool
This method is useful for database drivers that do not support executing
a PDOStatement object when a previously executed PDOStatement object still
has unfetched rows. If your database driver suffers from this limitation,
the problem may manifest itself in an out-of-sequence error.
PDOStatement::closeCursor() is implemented either as an
optional driver specific method (allowing for maximum efficiency), or as
the generic PDO fallback if no driver specific function is installed.
The PDO generic fallback is semantically the same as writing the following
code in your PHP script:
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
Parâmetros
Esta função não possui parâmetros.
Valor Retornado
Retorna true
em caso de sucesso ou false
em caso de falha.
Erros/Exceções
Emite um erro de nível E_WARNING
se o atributo PDO::ATTR_ERRMODE
estiver definido
como PDO::ERRMODE_WARNING
.
Lança uma exceção PDOException se o atributo PDO::ATTR_ERRMODE
estiver definido como PDO::ERRMODE_EXCEPTION
.
Exemplos
Exemplo #1 A PDOStatement::closeCursor() example
In the following example, the $stmt PDOStatement
object returns multiple rows but the application fetches only the first
row, leaving the PDOStatement object in a state of having unfetched rows.
To ensure that the application will work with all database drivers, the
author inserts a call to PDOStatement::closeCursor()
on $stmt before executing the
$otherStmt PDOStatement object.
<?php
/* Create a PDOStatement object */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Create a second PDOStatement object */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* Execute the first statement */
$stmt->execute();
/* Fetch only the first row from the results */
$stmt->fetch();
/* The following call to closeCursor() may be required by some drivers */
$stmt->closeCursor();
/* Now we can execute the second statement */
$otherStmt->execute();
?>