PDOStatement::closeCursor
Manual de referencia de PHP PDO
PDOStatement::closeCursor — Cierra el cursor, permitiendo que la sentencia se pueda ejecutar de nuevo. (PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)
Descripción
Sintaxis
bool PDOStatement::closeCursor ( void )
PDOStatement::closeCursor() libera la conexión al servicio de base de datos para poder enviar otras sentencias SQL, pero deja la sentencia en un estado en el que puede ser ejecutada de nuevo.
Cuando el objeto PDOStatement ejecutado anteriormente todavía tiene filas sin recuperar, este método es muy útil para aquellos controladores de base de datos que no admiten la ejecución de otro objeto PDOStatement. Si el controlador de base de datos está sujeto a esta limitación, puede aparecer un problema de errores fuera de orden.
PDOStatement::closeCursor() se implementa como un método específico del controlador opcional (el más eficiente), o bien como una alternativa general de PDO cuando no hay funcionalidad específica del controlador. La alternativa general es semánticamente equivalente al siguiente código PHP:
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
Valores de retorno
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Ejemplo
Un ejemplo de PDOStatement::closeCursor()
En el siguiente ejemplo, el objeto PDOStatement $stmt devuelve varias filas, pero la aplicación sólo recupera la primera, dejando el objeto PDOStatement en un estado con filas sin recuperar. Para asegurarse de que la aplicación funcione correctamente con todos los controladores de base de datos, antes de ejecutar el objeto PDOStatement $otherStmt, se llama a PDOStatement::closeCursor() sobre $stmt.
<?php
/* 创建一个 PDOStatement 对象 */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* 创建第二个 PDOStatement 对象 */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* 执行第一条语句 */
$stmt->execute();
/* 从结果集中只取出第一行 */
$stmt->fetch();
/* The following call to closeCursor() may be required by some drivers */
$stmt->closeCursor();
/* 现在可以执行第二条语句了 */
$otherStmt->execute();
?>
Otras extensiones