(PHP 5 >= 5.1.0, PHP 7, 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);
?>
Başarı durumunda TRUE
, başarısızlık durumunda FALSE
döner.
Ö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
/* Bir PDOStatement nesnesi oluşturalım */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Bir PDOStatement nesnesi daha oluşturalım*/
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* İlkini çalıştıralım */
$stmt->execute();
/* İlk satırı alalım */
$stmt->fetch();
/* Bazı sürücüler bu çağrıyı gerektirir */
$stmt->closeCursor();
/* Artık ikinci deyimi çalıştırabiliriz */
$otherStmt->execute();
?>