PDOStatement::closeCursor
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor —
Schließt den Cursor, damit die Anweisung erneut ausgeführt werden kann
Beschreibung
public PDOStatement::closeCursor():
bool
Diese Methode ist nützlich für Datenbanktreiber, die die Ausführung eines
PDOStatement-Objekts nicht unterstützen, wenn ein zuvor ausgeführtes
PDOStatement-Objekt noch nicht abgrufene Zeilen enthält. Wenn der
Datenbanktreiber diese Einschränkung aufweist, kann es zu einem
Out-of-Sequence-Fehler kommen.
PDOStatement::closeCursor() ist entweder als
optionale treiberspezifische Methode implementiert (für maximale
Effizienz), oder als generischer PDO-Fallback, wenn keine
treiberspezifische Funktion installiert ist. Der generische PDO-Fallback
ist semantisch dasselbe wie der folgende Code in einem PHP-Skript:
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
Parameter-Liste
Diese Funktion besitzt keine Parameter.
Rückgabewerte
Gibt bei Erfolg true
zurück. Bei einem Fehler wird false
zurückgegeben.
Fehler/Exceptions
Gibt einen Fehler der Stufe E_WARNING
aus, wenn das Attribut PDO::ATTR_ERRMODE
auf PDO::ERRMODE_WARNING
gesetzt ist.
Löst eine PDOException aus, wenn das Attribut PDO::ATTR_ERRMODE
auf PDO::ERRMODE_EXCEPTION
gesetzt ist.
Beispiele
Beispiel #1 PDOStatement::closeCursor()-Beispiel
Im folgenden Beispiel gibt das PDOStatement-Objekt
$stmt mehrere Zeilen zurück, aber die Anwendung ruft
nur die erste Zeile ab, wodurch das PDOStatement-Objekt in einem Zustand
mit nicht abgerufenen Zeilen verbleibt. Um sicherzustellen, dass die
Anwendung mit allen Datenbanktreibern funktioniert, wird hier
PDOStatement::closeCursor() für
$stmt aufgerufen, bevor das PDOStatement-Objekt
$otherStmt ausgeführt wird.
<?php
/* Erstellen eines PDOStatement-Objekts */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Erstellen eines zweiten PDOStatement-Objekts */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* Ausführen der ersten Anweisung */
$stmt->execute();
/* Nur die erste Zeile der Ergebnisse wird abgerufen */
$stmt->fetch();
/* Bei manchen Treibern kann der folgende Aufruf von closeCursor() erforderlich sein */
$stmt->closeCursor();
/* Nun kann die zweite Anweisung ausgeführt werden */
$otherStmt->execute();
?>