PDOStatement::closeCursor -- Închide cursorul, permiţând ca declaraţia să fie executată din nou.
Descriere
bool PDOStatement::closeCursor ( void )
PDOStatement::closeCursor() eliberează conexiunea din server astfel încât pot fi emise alte declaraţii SQL, dar lasă instrucţiunea în starea de a putea fi executată din nou.
Această metodă este utilă pentru drivere de baze de date care nu suportă executarea unui obiect PDOStatement când un obiect PDOStatement executat anterior mai are rânduri nepreluate.
Dacă driverul bazei de date are limitări, problema se poate manifesta ca o eroare out-of-sequence.
PDOStatement::closeCursor() este implementat fie ca metodă specifică unui driver opţional (permiţând o eficienţă maximă), fie ca răspuns generic PDO dacă nu este instalată nicio funcţie specifică unui driver. Răspunsul generic PDO este, din punct de vedere semantic, acelaşi cu codul următor în programul PHP:
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
Exemplu. PDOStatement::closeCursor()
În următorul exemplu, obiectul $stmt PDOStatement întoarce mai multe rânduri dar aplicaţia preia doar primul rând, lăsând obiectul PDOStatement cu celelalte rânduri nepreluate.
Pentru a verifica dacă aplicaţia funcţionează cu toate driverele bazei de date, autorul inserează o apelare de tip PDOStatement::closeCursor() a obiectului $stmt înainte de a executa obiectul $otherStmt PDOStatement.
<?php
/* Creare obiect PDOStatement */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Crearea celuide al doilea obiect PDOStatement */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* Executa prima instructiune */
$stmt->execute();
/* Preia doar primul rand dintre rezultate */
$stmt->fetch();
/* Urmatoarea apelare closeCursor() poate fi ceruta de unele drivere */
$stmt->closeCursor();
/* Acum poate fi executata a doua instructiune */
$otherStmt->execute();
?>
See Also