(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::closeCursor — Göstericiyi kapatarak deyimin tekrar çalıştırılabilmesini sağlar
PDOStatement::closeCursor() yöntemi sunucu bağlantısını serbest bırakarak, mevcut deyimin durumunu değiştirmeden tekrar çalıştırılabilmesinin yanında başka SQL deyimlerinin çalıştırılabilmesini de mümkün kılar.
Evvelce çalıştırılmış bir PDOStatement nesnesinden henüz alınmamış satırların olduğu durumda bazı sürücüler bir PDOStatement nesnesinin daha çalıştırılmasına izin vermezler. Bu yöntem bu tür sürücülerde yararlıdır. Sürücünüz böyle bir sürücü ise sorun sıra dışı bir hata olarak kendini gösterir.
PDOStatement::closeCursor() yöntemi ya sürücüye özel isteğe bağlı (azami verimlilikte) bir yöntemdir ya da genel amaçlı bir PDO son çare yöntemidir. Genel amaçlı yöntem aşağıdaki PHP koduna eşdeğer bir işlem yürütür:
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
Bu işlevin bağımsız değişkeni yoktur.
PDO::ATTR_ERRMODE
özniteliğine PDO::ERRMODE_WARNING
atanırsa E_WARNING
düzeyinde bir hata çıktılanır.
PDO::ATTR_ERRMODE
özniteliğine PDO::ERRMODE_EXCEPTION
atanırsa PDOException istisnası oluşur.
Örnek 1 - PDOStatement::closeCursor() örneği
Aşağıdaki örnekte, $stmt PDOStatement nesnesi çok sayıda satır döndürdüğü halde uygulama sadece ilk satırı almakta ve PDOStatement nesnesini satırları henüz alınmamış durumda bırakmaktadır. Uygulamanın tüm veritabanı sürücüleri ile çalışmasını sağlamak için $stmt veya $otherStmt PDOStatement nesnesi çalıştırılmadan önce bir PDOStatement::closeCursor() çağrısı yapması gerekir.
<?php
$stmt = $dbh->prepare('SELECT foo FROM bar');
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
$stmt->execute();
$stmt->fetch();
$stmt->closeCursor();
$otherStmt->execute();
?>