PDOStatement::closeCursor – Schließt den Cursor, damit die Anweisung erneut ausgeführt werden kann. (PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)
bool PDOStatement::closeCursor (void)
PDOStatement::closeCursor() gibt die Verbindung zum Datenbankdienst frei, sodass andere SQL-Anweisungen ausgegeben werden können, belässt die Anweisung jedoch in einem Zustand, in dem sie erneut ausgeführt werden kann.
Diese Methode ist sehr nützlich für Datenbanktreiber, die die Ausführung eines anderen PDOStatement-Objekts nicht unterstützen, wenn im zuletzt ausgeführten PDOStatement-Objekt noch nicht abgerufene Zeilen vorhanden sind. Wenn der Datenbanktreiber dieser Einschränkung unterliegt, können Out-of-Order-Fehler auftreten.
PDOStatement::closeCursor() wird entweder als optionale treiberspezifische Methode (am effizientesten) oder als allgemeiner PDO-Fallback implementiert, wenn keine treiberspezifische Funktionalität vorhanden ist. Die allgemeine Fallback-Semantik ist dieselbe wie im folgenden PHP-Code:
<?phpdo { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) break;} while (true);?>
Gibt TRUE bei Erfolg oder FALSE bei Fehler zurück.
Im folgenden Beispiel gibt das PDOStatement-Objekt „$stmt“ mehrere Zeilen zurück, die Anwendung ruft jedoch nur die erste Zeile ab und belässt das PDOStatement-Objekt in einem Zustand mit nicht abgerufenen Zeilen. Um sicherzustellen, dass die Anwendung mit allen Datenbanktreibern normal ausgeführt werden kann, ruft $stmt einmal PDOStatement::closeCursor() auf, bevor das PDOStatement-Objekt $otherStmt ausgeführt wird.
<?php/* Erstellen Sie ein PDOStatement-Objekt */$stmt = $dbh->prepare('SELECT foo FROM bar');/* Erstellen Sie ein zweites PDOStatement-Objekt */$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');/* Erste Anweisung ausführen*/$stmt->execute();/* Nur die erste Zeile aus der Ergebnismenge abrufen */$stmt->fetch();/* Der folgende Aufruf von closeCursor() kann für einige Treiber erforderlich sein */$stmt->closeCursor();/* Sie können ihn jetzt ausführen die zweite Anweisung*/$otherStmt->execute();?>