Files
php-doc-ru/reference/pdo/pdostatement/closecursor.xml
Alexey Pyltsyn 8f8d4016fe Upd
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@343999 c90b9560-bf6c-de11-be94-00142212c4b1
2018-01-28 09:37:16 +00:00

135 lines
4.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: dd07341fae2c414adc1f700be0890ff32e8daab4 Maintainer: tmn Status: ready -->
<!-- Reviewed: yes Maintainer: lex -->
<!-- $Revision$ -->
<refentry xml:id="pdostatement.closecursor" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>PDOStatement::closeCursor</refname>
<refpurpose>
Закрывает курсор, переводя запрос в состояние готовности к повторному запуску
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>bool</type><methodname>PDOStatement::closeCursor</methodname>
<void/>
</methodsynopsis>
<para>
<function>PDOStatement::closeCursor</function> освобождает соединение с сервером,
давая возможность запускать другие SQL-запросы. Метод оставляет запрос в состоянии
готовности к повторному запуску.
</para>
<para>
Этот метод полезен при использовании драйверов баз данных, которые не
позволяют запустить PDOStatement, пока предыдущий объект PDOStatement не выберет
все данные из результирующего набора. Если это ограничение распространяется
на ваш драйвер, будет вызвана ошибка нарушения последовательности запросов
(out-of-sequence error).
</para>
<para>
<function>PDOStatement::closeCursor</function> может быть реализован как
дополнительный метод конкретного драйвера (позволяющий добиться максимальной
эффективности работы), либо как внутренний метод PDO, если такой функции в
драйвере нет. Реализация внутреннего метода PDO семантически схожа с приведенной
ниже:
<programlisting role="php">
<![CDATA[
<?php
do {
while ($stmt->fetch())
;
if (!$stmt->nextRowset())
break;
} while (true);
?>
]]>
</programlisting>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>
Пример использования <function>PDOStatement::closeCursor</function>
</title>
<para>
В приведенном примере, объект PDOStatement <varname>$stmt</varname>
возвращает несколько строк, однако приложение считывает только первую из них,
оставляя объект PDOStatement в состоянии, когда есть еще невыбранные строки.
Чтобы быть уверенным в том, что приложение будет работать со всеми драйверами
баз данных, автор добавил вызов метода
<function>PDOStatement::closeCursor</function> объекта
<varname>$stmt</varname> перед тем как запустить другой запрос
PDOStatement <varname>$otherStmt</varname>.
</para>
<programlisting role="php">
<![CDATA[
<?php
/* Создание объекта PDOStatement */
$stmt = $dbh->prepare('SELECT foo FROM bar');
/* Создание другого объекта PDOStatement */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');
/* Выполнение первого запроса */
$stmt->execute();
/* Выборка только первой строки результирующего набора первого запроса */
$stmt->fetch();
/* Следующий вызов closeCursor() может быть обязательным для некоторых драйверов */
$stmt->closeCursor();
/* теперь можно запускать второй запрос */
$otherStmt->execute();
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>PDOStatement::execute</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->