PDOStatement::closeCursor — Закрывает курсор, чтобы оператор можно было выполнить снова. (PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)
bool PDOStatement::closeCursor (void)
PDOStatement::closeCursor() освобождает соединение со службой базы данных, чтобы можно было выполнять другие операторы SQL, но оставляет оператор в состоянии, в котором его можно выполнить снова.
Этот метод очень полезен для драйверов баз данных, которые не поддерживают выполнение другого объекта PDOStatement, когда в последнем выполненном объекте PDOStatement все еще есть невыбранные строки. Если на драйвер базы данных распространяется это ограничение, могут возникнуть ошибки, выходящие за пределы порядка.
PDOStatement::closeCursor() реализуется либо как дополнительный метод, специфичный для драйвера (наиболее эффективный), либо как общий запасной вариант PDO, когда нет функций, специфичных для драйвера. Общая семантика резервного варианта такая же, как в следующем PHP-коде:
<?phpdo { while ($stmt->fetch()) ; if (!$stmt->nextRowset()) Break;} while (true);?>
Возвращает TRUE в случае успеха или FALSE в случае неудачи.
В следующем примере объект $stmt PDOStatement возвращает несколько строк, но приложение извлекает только первую строку, оставляя объект PDOStatement в состоянии с невыбранными строками. Чтобы гарантировать, что приложение может нормально работать со всеми драйверами базы данных, $stmt вызывает PDOStatement::closeCursor() один раз перед выполнением объекта $otherStmt PDOStatement.
<?php/* Создать объект PDOStatement */$stmt = $dbh->prepare('SELECT foo FROM bar');/* Создать второй объект PDOStatement */$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');/* Выполняем первый оператор*/$stmt->execute();/* Извлекает только первую строку из набора результатов */$stmt->fetch();/* Следующий вызов closeCursor() может потребоваться некоторым драйверам */$stmt->closeCursor();/* Теперь вы можете выполнить второй Statement*/$otherStmt->execute();?>