PHP 8.4.1 Released!

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

PDOStatement::closeCursor() libera la conexión al servidor, por lo que otras sentencias SQL podrían ejecutarse, pero deja la sentencia en un estado que la habilita para ser ejecutada otra vez.

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

Ver también

add a note

User Contributed Notes 1 note

up
1
Anonymous
9 years ago
In case this is helpful to anybody else who ends-up here after getting the following error:

SQLState: 24000 [Microsoft][ODBC SQL Server Driver]Invalid cursor state

PDOStatement :: closeCursor() did not fix the issue for me. However, adding SET NOCOUNT ON to the beginning of my stored procedure did.
To Top