PDOStatement::closeCursor
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor —
Cierra un cursor, habilitando a la sentencia para que sea ejecutada otra vez
Descripción
public PDOStatement::closeCursor():
bool
Este método es útil para los controladores de bases de datos que no admiten la ejecución
de un objeto PDOStatement cuando otro objeto PDOStatement previamente ejecutado aún
le restan filas por obtener. Si su controlador de bases de datos tiene esta limitación,
el problema podría manifestarse en un error de "fuera de sencuencia".
PDOStatement::closeCursor() está implementado como un método
opcional específico del controlador (permitienedo la máxima eficiencia), o como
la alternativa genérica de PDO si no está instalada ninguna función específica del controlador.
La alternativa genérica de PDO es semánticamente la misma que si se escribiera el siguiente
código en un script de PHP:
<?php
do {
while ($sentencia->fetch())
;
if (!$sentencia->nextRowset())
break;
} while (true);
?>
Valores devueltos
Devuelve true
en caso de éxito o false
en caso de error.
Ejemplos
Ejemplo #1 Un ejemplo de PDOStatement::closeCursor()
En el siguiente ejemplo, el objeto PDOStatement $sentencia
devuelve múltiples filas, aunque la aplicación solamente obtenga la primera,
dejando al objeto PDOStatement con filas aún por obtener.
Para asegurarse de que la aplicación funcionará con todos los controladores de bases de datos,
el autor inserta una llmada a PDOStatement::closeCursor()
sobre $sentencia antes de ejecutar el objeto PDOStatement
$otraSentencia.
<?php
/* Crear un objeto PDOStatement */
$sentencia = $gbd->prepare('SELECT foo FROM bar');
/* Crear un segundo objeto PDOStatement */
$otraSentencia = $gbd->prepare('SELECT foobaz FROM foobar');
/* Ejecutar la primera sentencia */
$sentencia->execute();
/* Obtener solamente la primera fila de los resultados */
$sentencia->fetch();
/* La siguiente llamada a closeCursor() podría ser necesaria para algunos controladores */
$sentencia->closeCursor();
/* Ahora se puede ejecutar la segunda sentencia */
$otraSentencia->execute();
?>