mirror of
https://github.com/php/doc-ru.git
synced 2025-07-22 18:26:31 +00:00
245 lines
8.9 KiB
XML
245 lines
8.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 5e41012cfdf8f2eff5fa56de446c7656afac536c Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<refentry xml:id="function.oci-close" xmlns="http://docbook.org/ns/docbook">
|
||
<refnamediv>
|
||
<refname>oci_close</refname>
|
||
<refpurpose>Закрывает соединение с сервером Oracle</refpurpose>
|
||
</refnamediv>
|
||
|
||
<refsect1 role="description">
|
||
&reftitle.description;
|
||
<methodsynopsis>
|
||
<type class="union"><type>bool</type><type>null</type></type><methodname>oci_close</methodname>
|
||
<methodparam><type>resource</type><parameter>connection</parameter></methodparam>
|
||
</methodsynopsis>
|
||
<para>
|
||
Освобождает <parameter>connection</parameter>. Соответствующее ему
|
||
соединение с базой данных будет закрыто при отсутствии использующих
|
||
его ресурсов и если оно было получено из функции
|
||
<function>oci_connect</function> или <function>oci_new_connect</function>.
|
||
</para>
|
||
<para>
|
||
Рекомендуется закрывать неиспользуемые более соединения, т.к.
|
||
это освобождает ресурсы базы данных для других пользователей.
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="parameters">
|
||
&reftitle.parameters;
|
||
<para>
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><parameter>connection</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Идентификатор соединения Oracle, полученный из функций
|
||
<function>oci_connect</function>, <function>oci_pconnect</function>
|
||
или <function>oci_new_connect</function>.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="returnvalues">
|
||
&reftitle.returnvalues;
|
||
<para>
|
||
Возвращает &null; если <link linkend="ini.oci8.old-oci-close-semantics">oci8.old_oci_close_semantics</link> включён или &true; в противном случае.
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="examples">
|
||
&reftitle.examples;
|
||
<example>
|
||
<title>Закрытие соединения</title>
|
||
<para>
|
||
Сопутствующие соединению ресурсы должны быть закрыты для
|
||
обеспечения корректного завершения соединения с базой данных
|
||
и освобождения её ресурсов.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
|
||
if (!$conn) {
|
||
$e = oci_error();
|
||
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
|
||
}
|
||
|
||
$stid = oci_parse($conn, 'SELECT * FROM departments');
|
||
$r = oci_execute($stid);
|
||
oci_fetch_all($stid, $res);
|
||
var_dump($res);
|
||
|
||
// Освобождаем идентификатор выражения при закрытии соединения
|
||
oci_free_statement($stid);
|
||
oci_close($conn);
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Соединение базы данных не закрывается до тех пор, пока не будут закрыты
|
||
все ссылки на него</title>
|
||
<para>
|
||
Внутренний счётчик ссылок (refcount) идентификатора соединения
|
||
должен равняться нулю перед непосредственным закрытием соединения
|
||
к базе данных.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
|
||
if (!$conn) {
|
||
$e = oci_error();
|
||
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
|
||
}
|
||
|
||
$stid = oci_parse($conn, 'SELECT * FROM departments'); // это увеличивает refcount на $conn
|
||
oci_execute($stid);
|
||
oci_fetch_all($stid, $res);
|
||
var_dump($res);
|
||
|
||
oci_close($conn);
|
||
|
||
// $conn больше не может использоваться в данном скрипте, но реальное
|
||
// соединение с базой данных будет открыто, пока не будет освобождена $stid.
|
||
var_dump($conn); // выводит NULL
|
||
|
||
// Пока PHP спит, запрос к виду Oracle V$SESSION в окне терминала
|
||
// покажет, что пользователь базы данных всё ещё подключён.
|
||
sleep(10);
|
||
|
||
// Как только $stid освобождается, соединение к базе данных физически закрывается
|
||
oci_free_statement($stid);
|
||
|
||
// Пока PHP спит, запрос к виду Oracle V$SESSION в окне терминала
|
||
// покажет, что пользователь базы данных уже отключился.
|
||
sleep(10);
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Закрытие соединения, открытого несколько раз</title>
|
||
<para>
|
||
При повторном использовании учётных данных пользователя, оба
|
||
соединения должны быть закрыты перед непосредственным закрытием
|
||
соединения к базе данных.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$conn1 = oci_connect('hr', 'welcome', 'localhost/XE');
|
||
|
||
// Использование тех же учётных данных повторно использует одно и то же
|
||
// соединение с базой данных. Любые незафиксированные изменения в
|
||
// $conn1 будут видны в $conn2
|
||
$conn2 = oci_connect('hr', 'welcome', 'localhost/XE');
|
||
|
||
// Пока PHP спит, запрос к виду Oracle V$SESSION в окне терминала
|
||
// покажет, что подключён только один пользователь базы данных.
|
||
sleep(10);
|
||
|
||
oci_close($conn1); // не закрывает реальное соединение с базой данных
|
||
var_dump($conn1); // выводит NULL, т.к. $conn1 теперь бесполезна
|
||
var_dump($conn2); // показывает, что $conn2 всё ещё является корректным ресурсом соединения
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<example>
|
||
<title>Соединение закрывается при уходе переменных из области видимости</title>
|
||
<para>
|
||
Когда все переменные, ссылающиеся на соединение, уходят из области
|
||
видимости и освобождаются PHP, происходит откат транзакции (если
|
||
необходимо) и соединение с базой закрывается.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
function myfunc() {
|
||
$conn = oci_connect('hr', 'hrpwd', 'localhost/XE');
|
||
if (!$conn) {
|
||
$e = oci_error();
|
||
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
|
||
}
|
||
|
||
$stid = oci_parse($conn, 'UPDATE mytab SET id = 100');
|
||
oci_execute($stid, OCI_NO_AUTO_COMMIT);
|
||
return "Закончили!";
|
||
}
|
||
|
||
$r = myfunc();
|
||
// В этой точке происходит откат транзакции и закрывается соответствующее
|
||
// соединение с базой данных
|
||
|
||
print $r; // отображает возвращённое функцией значение "Закончили!"
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</refsect1>
|
||
|
||
<refsect1 role="notes">
|
||
&reftitle.notes;
|
||
<note>
|
||
<para>
|
||
Переменные, зависящие от идентификатора соединений, такие как
|
||
идентификаторы выражений, полученные из <function>oci_parse</function>,
|
||
должны быть также освобождены до закрытия соединения с базой данных.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Функция <function>oci_close</function> не закрывает соединения с
|
||
базой данных, созданные функцией <function>oci_pconnect</function>.
|
||
</para>
|
||
</note>
|
||
</refsect1>
|
||
|
||
<refsect1 role="seealso">
|
||
&reftitle.seealso;
|
||
<para>
|
||
<simplelist>
|
||
<member><function>oci_connect</function></member>
|
||
<member><function>oci_free_statement</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
|
||
-->
|