Unsets connection
. The underlying database connection is closed if no other resources are using it and if it was created with oci_connect() or oci_new_connect().
It is recommended to close connections that are no longer needed because this makes database resources available for other users.
An Oracle connection identifier returned by oci_connect(), oci_pconnect(), or oci_new_connect().
Returns TRUE
on success or FALSE
on failure.
Variables that have a dependency on the connection identifier, such as statement identifiers returned by oci_parse(), must also be freed before the underlying database connection is closed.
Prior to version PHP 5.1.2 (PECL OCI8 1.1) oci_close() was a no-op. In more recent versions it correctly closes the Oracle connection. Use oci8.old_oci_close_semantics option to restore old behavior of this function.
The oci_close() function does not close the underlying database connections created with oci_pconnect().
Resources associated with a connection should be closed to ensure the underlying database connection is properly terminated and the database resources are released.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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 ); // Free the statement identifier when closing the connection oci_free_statement( $stid ); oci_close( $conn ); ?> |
The internal refcount of a connection identifier must be zero before the underlying connection to the database is closed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?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' ); // this increases the refcount on $conn oci_execute( $stid ); oci_fetch_all( $stid , $res ); var_dump( $res ); oci_close( $conn ); // $conn is no longer usable in the script but the underlying database // connection is still held open until $stid is freed. var_dump( $conn ); // prints NULL // While PHP sleeps, querying the Oracle V$SESSION view in a // terminal window will show that the database user is still connected. sleep(10); // When $stid is freed, the database connection is physically closed oci_free_statement( $stid ); // While PHP sleeps, querying the Oracle V$SESSION view in a // terminal window will show that the database user has disconnected. sleep(10); ?> |
When database credentials are reused, both connections must be closed before the underlying database connection is closed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $conn1 = oci_connect( 'hr' , 'welcome' , 'localhost/XE' ); // Using the same credentials reuses the same underlying database connection // Any uncommitted changes done on $conn1 will be visible in $conn2 $conn2 = oci_connect( 'hr' , 'welcome' , 'localhost/XE' ); // While PHP sleeps, querying the Oracle V$SESSION view in a // terminal window will show that only one database user is connected. sleep(10); oci_close( $conn1 ); // doesn't close the underlying database connection var_dump( $conn1 ); // prints NULL because the variable $conn1 is no longer usable var_dump( $conn2 ); // displays that $conn2 is still a valid connection resource ?> |
When all variables referencing a connection go out of scope and are freed by PHP, a rollback occurs (if necessary) and the underlying connection to the database is closed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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 "Finished" ; } $r = myfunc(); // At this point a rollback occurred and the underlying database connection was released. print $r ; // displays the function return value "Finished" ?> |
Please login to continue.