Закрывает соединение с сервером Oracle

# oci_close

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_close — Закрывает соединение с сервером Oracle

### Описание

function oci_close(resource `$connection`): ?bool

Освобождает `connection`. Соответствующее ему соединение с базой данных будет закрыто при отсутствии использующих его ресурсов и если оно было получено из функции oci_connect() или oci_new_connect().

Рекомендуется закрывать неиспользуемые более соединения, т.к. это освобождает ресурсы базы данных для других пользователей.

### Список параметров

`connection`

  Идентификатор соединения Oracle, полученный из функций oci_connect(), oci_pconnect() или oci_new_connect().

### Возвращаемые значения

Возвращает `null` если oci8.old_oci_close_semantics включён или `true` в противном случае.

### Примеры

Пример #1 Закрытие соединения

Сопутствующие соединению ресурсы должны быть закрыты для обеспечения корректного завершения соединения с базой данных и освобождения её ресурсов.

    <?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);

    ?>

Пример #2 Соединение базы данных не закрывается до тех пор, пока не будут закрыты все ссылки на него

Внутренний счётчик ссылок (refcount) идентификатора соединения должен равняться нулю перед непосредственным закрытием соединения к базе данных.

    <?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);

    ?>

Пример #3 Закрытие соединения, открытого несколько раз

При повторном использовании учётных данных пользователя, оба соединения должны быть закрыты перед непосредственным закрытием соединения к базе данных.

    <?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 всё ещё является корректным ресурсом соединения

    ?>

Пример #4 Соединение закрывается при уходе переменных из области видимости

Когда все переменные, ссылающиеся на соединение, уходят из области видимости и освобождаются PHP, происходит откат транзакции (если необходимо) и соединение с базой закрывается.

    <?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;  // отображает возвращённое функцией значение "Закончили!"

    ?>

### Примечания

> Замечание:

> Переменные, зависящие от идентификатора соединений, такие как идентификаторы выражений, полученные из oci_parse(), должны быть также освобождены до закрытия соединения с базой данных.

> Замечание:

> Функция oci_close() не закрывает соединения с базой данных, созданные функцией oci_pconnect().

### Смотрите также

- oci_connect() - Устанавливает соединение с базой данных Oracle
- oci_free_statement() - Освобождает ресурсы, занимаемые курсором или SQL-выражением

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open