PDOStatement::closeCursor — Ferme le curseur afin que l'instruction puisse être à nouveau exécutée. (PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)
bool PDOStatement::closeCursor ( void )
PDOStatement::closeCursor() libère la connexion au service de base de données afin que d'autres instructions SQL puissent être émises, mais laisse l'instruction dans un état où elle peut être à nouveau exécutée.
Cette méthode est très utile pour les pilotes de base de données qui ne prennent pas en charge l'exécution d'un autre objet PDOStatement lorsqu'il existe encore des lignes non récupérées dans le dernier objet PDOStatement exécuté. Si le pilote de base de données est soumis à cette limitation, des erreurs dans le désordre peuvent se produire.
PDOStatement::closeCursor() est soit implémenté en tant que méthode facultative spécifique au pilote (la plus efficace), soit implémenté en tant que solution de secours générale PDO lorsqu'il n'y a pas de fonctionnalité spécifique au pilote. La sémantique générale de secours est la même que celle du code PHP suivant :
<?phpdo { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) break;} while (true);?>
Renvoie VRAI en cas de succès ou FAUX en cas d'échec.
Dans l'exemple suivant, l'objet $stmt PDOStatement renvoie plusieurs lignes, mais l'application récupère uniquement la première ligne, laissant l'objet PDOStatement dans un état sans aucune ligne récupérée. Pour garantir que l'application peut fonctionner normalement avec tous les pilotes de base de données, $stmt appelle PDOStatement::closeCursor() une fois avant d'exécuter l'objet $otherStmt PDOStatement.
<?php/* Créer un objet PDOStatement */$stmt = $dbh->prepare('SELECT foo FROM bar');/* Créer un deuxième objet PDOStatement */$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');/* Exécute la première instruction*/$stmt->execute();/* Récupère uniquement la première ligne du jeu de résultats */$stmt->fetch();/* L'appel suivant à closeCursor() peut être requis par certains pilotes */$stmt->closeCursor();/* Vous pouvez maintenant exécuter la deuxième instruction*/$otherStmt->execute();?>