PHP 8.4.6 Released!

oci_close

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

oci_closeFecha uma conexão Oracle

Descrição

oci_close(resource $connection): ?bool

Remove a definição da conexão connection. A conexão do banco de dados subjacente é fechada se nenhum outro recurso a estiver usando e se ela foi criada com oci_connect() ou oci_new_connect().

É recomendável fechar conexões que não são mais necessárias porque isso torna os recursos do banco de dados disponíveis para outros usuários.

Parâmetros

connection

Um identificador de conexão Oracle retornado por oci_connect(), oci_pconnect(), ou oci_new_connect().

Valor Retornado

Retorna null quando oci8.old_oci_close_semantics está habilitado, ou true caso contrário.

Exemplos

Exemplo #1 Fechando uma conexão

Os recursos associados a uma conexão devem ser fechados para garantir que a conexão do banco de dados subjacente seja encerrada corretamente e os recursos do banco de dados sejam liberados.

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

// Libera o identificador da instrução ao fechar a conexão
oci_free_statement($stid);
oci_close($conn);

?>

Exemplo #2 As conexões de banco de dados não são fechadas até que todas as referências sejam fechadas

A contagem de referência interna de um identificador de conexão deve ser zero antes que a conexão subjacente ao banco de dados seja fechada.

<?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'); // isto aumenta a contagem de referência de $conn
oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);

oci_close($conn);

// $conn não é mais utilizável no script, mas a conexão do banco de dados
// subjacente ainda é mantida aberta até que $stid seja liberado.
var_dump($conn); // exibe NULL

// Enquanto o PHP dorme, consultar a visualização Oracle V$SESSION em uma
// janela de terminal mostrará que o usuário do banco de dados ainda está conectado.
sleep(10);

// Quando $stid é liberado, a conexão com o banco de dados é fisicamente fechada
oci_free_statement($stid);

// Enquanto o PHP dorme, consultar a visualização Oracle V$SESSION em uma
// janela de terminal mostrará que o usuário do banco de dados foi desconectado.
sleep(10);

?>

Exemplo #3 Fechando uma conexão aberta mais de uma vez

Quando as credenciais do banco de dados são reutilizadas, ambas as conexões devem ser fechadas antes que a conexão do banco de dados subjacente seja fechada.

<?php

$conn1
= oci_connect('hr', 'welcome', 'localhost/XE');

// Usar as mesmas credenciais reutiliza a mesma conexão de banco de dados subjacente
// Quaisquer alterações não confirmadas feitas em $conn1 serão visíveis em $conn2
$conn2 = oci_connect('hr', 'welcome', 'localhost/XE');

// Enquanto o PHP dorme, consultar a visualização Oracle V$SESSION em uma
// janela de terminal mostrará que apenas um usuário do banco de dados está conectado.
sleep(10);

oci_close($conn1); // não fecha a conexão do banco de dados subjacente
var_dump($conn1); // exibe NULL porque a variável $conn1 não é mais utilizável
var_dump($conn2); // exibe que $conn2 ainda é um recurso de conexão válido

?>

Exemplo #4 As conexões são fechadas quando as variáveis ​​saem do escopo

Quando todas as variáveis ​​que referenciam uma conexão saem do escopo e são liberadas pelo PHP, ocorre uma reversão (se necessário) e a conexão subjacente ao banco de dados é fechada.

<?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
"Concluído";
}

$r = myfunc();
// Neste ponto, ocorreu uma reversão e a conexão com o banco de dados subjacente foi liberada.

print $r; // exibe o valor de retorno da função "Concluído"

?>

Notas

Nota:

Variáveis ​​que têm uma dependência no identificador de conexão, como identificadores de declaração retornados por oci_parse(), também devem ser liberadas antes que a conexão do banco de dados subjacente seja fechada.

Nota:

A função oci_close() não fecha as conexões de banco de dados subjacentes criadas com oci_pconnect().

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
1
Fahd Alwashmi (F-A-W)
13 years ago
please note, you can use oci_close() to close persistent connections opened with oci_pconnect() in PHP ver 5.3 or above.
as stated in here:
http://www.php.net/manual/en/oci8.configuration.php#ini.oci8.persistent-timeout
up
-3
yepster at hotmail dot com
23 years ago
For using persistent connections && being able to sleep, I use:

function close_db_locks_on_abort( ) {
global $conn;
if( connection_aborted() ) {
$fp = fopen( "/tmp/shutdown-func.txt", "a" );
fwrite( $fp, sprintf( "connection aborted on %s\n", date( "d-m-Y H:i:s" ) ) );
if( $conn ) {
OCIRollBack( $conn );
fwrite( $fp, sprintf( "-- DURING CONNECTION! ip=%s, user=%s, page=%s\n", $_SERVER["REMOTE_ADDR"], $_SERVER["PHP_AUTH_USER"], $_SERVER["SCRIPT_FILENAME"] ) );
}
fclose( $fp );
}
}

register_shutdown_function ( "close_db_locks_on_abort" );

This makes sure a rollback is done on a connection when a user hits 'stop', so there will be no locks on table rows.
To Top