Description

Persistent connections are cached and re-used between requests, resulting
in reduced overhead on each page load; a typical PHP application will have
a single persistent connection open against an Oracle server per Apache
child process (or PHP FastCGI/CGI process). See the Persistent Database
Connections section for more information.

Parameters

username

The Oracle user name.

password

The password for username.

connection_string

Contains
the Oracle instance to connect to. It can be
an » Easy Connect
string, or a Connect Name from
the tnsnames.ora file, or the name of a local
Oracle instance.

If not specified, PHP uses
environment variables such as TWO_TASK (on Linux)
or LOCAL (on Windows)
and ORACLE_SID to determine the
Oracle instance to connect to.

To use the Easy Connect naming method, PHP must be linked with Oracle
10g or greater Client libraries. The Easy Connect string for Oracle
10g is of the form:
[//]host_name[:port][/service_name]. From Oracle
11g, the syntax is:
[//]host_name[:port][/service_name][:server_type][/instance_name].
Service names can be found by running the Oracle
utility lsnrctl status on the database server
machine.

The tnsnames.ora file can be in the Oracle Net
search path, which
includes $ORACLE_HOME/network/admin
and /etc. Alternatively
set TNS_ADMIN so
that $TNS_ADMIN/tnsnames.ora is read. Make sure
the web daemon has read access to the file.

character_set

Determines
the character set used by the Oracle Client libraries. The character
set does not need to match the character set used by the database. If
it doesn't match, Oracle will do its best to convert data to and from
the database character set. Depending on the character sets this may
not give usable results. Conversion also adds some time overhead.

If not specified, the
Oracle Client libraries determine a character set from
the NLS_LANG environment variable.

Passing this parameter can
reduce the time taken to connect.

session_mode

This
parameter is available since version PHP 5 (PECL OCI8 1.1) and accepts the
following values: OCI_DEFAULT,
OCI_SYSOPER and OCI_SYSDBA.
If either OCI_SYSOPER or
OCI_SYSDBA were specified, this function will try
to establish privileged connection using external credentials.
Privileged connections are disabled by default. To enable them you
need to set oci8.privileged_connect
to On.

PHP 5.3 (PECL OCI8 1.3.4) introduced the
OCI_CRED_EXT mode value. This tells Oracle to use
External or OS authentication, which must be configured in the
database. The OCI_CRED_EXT flag can only be used
with username of "/" and a empty password.
oci8.privileged_connect
may be On or Off.

OCI_CRED_EXT may be combined with the
OCI_SYSOPER or
OCI_SYSDBA modes.

User Contributed Notes 2 notes

[Editor's note: OCI8 1.3 should not experience the problem described in this user comment. The first use of such a connection will return an Oracle error which will trigger a cleanup in PHP. Subsequent persistent connection calls will then succeed. For high availability you might consider doing consecutive oci_pconnect calls in your script.]

If you connect using oci_pconnect and the connection has logged you off but is still valid, there seems to be no way to re-use that connection. The next time I try oci_pconnect and then perform an oci_execute operation, I get a "ORA-01012: not logged on" warning. This problem remains, even if I close the connection using oci_close. I ended up with the following (rather annoying) code.

Installed on CentOS 6.2, and had lots of trouble getting it to recognize tnsnames.ora. The fix for me was:

1. Make sure apache is getting the TNS_ADMIN env variable by putting it in the /etc/init.d/httpd file: TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin export PATH TNS_ADMIN

This can be debugging in PHP by <?php echo system('env'); ?> and by verifying that TNS_ADMIN is there.

2. Make sure to use the name at the beginning of the tnsnames.ora file - not the SID (although ideally they should match. However, if the name at the beginning is XXXX.world then pconnect will expect this - not the SID)