PDOStatement::closeCursor
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor â
Ferme le curseur, permettant Ă la requĂȘte d'ĂȘtre de nouveau exĂ©cutĂ©e
Description
public function PDOStatement::closeCursor():
bool
Cette méthode est utile pour les drivers de base de données qui ne supportent
pas l'exécution d'objet PDOStatement lorsqu'un objet PDOStatement exécuté
précédemment a encore des lignes non récupérées. Si le driver de base de
donnĂ©es souffre de cette limitation, le problĂšme se manifestera de lui-mĂȘme
dans une erreur en dehors de la séquence.
PDOStatement::closeCursor() est implémenté soit
en tant que méthode optionnelle spécifique au pilote, avec un maximum
d'efficacité, ou en tant que solution générique si aucune fonction
spécifique au pilote n'est installée.
SĂ©mantiquement, la fonction gĂ©nĂ©rique PDO revient Ă
écrire le code suivant dans le script PHP :
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
Liste de paramĂštres
Cette fonction ne contient aucun paramĂštre.
Valeurs de retour
Cette fonction retourne true en cas de succĂšs ou false si une erreur survient.
Exemples
Exemple #1 Exemple avec PDOStatement::closeCursor()
Dans l'exemple suivant, l'objet PDOStatement $stmt
retourne de multiples lignes, mais l'application récupÚre uniquement
la premiĂšre ligne, laissant l'objet PDOStatement dans l'Ă©tat oĂč il lui reste
des lignes non récupérées. Pour s'assurer que l'application fonctionnera
avec tous les drivers de base de données, l'auteur insÚre un appel à la fonction
PDOStatement::closeCursor() sur
$stmt avant l'exécution d'objet PDOStatement
$otherStmt.
<?php
/* Création d'un objet PDOStatement */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Création d'un second objet PDOStatement */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* ExĂ©cute la premiĂšre requĂȘte */
$stmt->execute();
/* Récupération de la premiÚre ligne uniquement depuis le résultat */
$stmt->fetch();
/* L'appel suivant Ă closeCursor() peut ĂȘtre requis par quelques drivers */
$stmt->closeCursor();
/* Maintenant, nous pouvons exĂ©cuter la deuxiĂšme requĂȘte */
$otherStmt->execute();
?>