PHP: Hypertext Preprocessor (original) (raw)
oci_pconnect
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_pconnect — Connect to an Oracle database using a persistent connection
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 FPM process). See the OCI8 Connection Handling and Connection Pooling 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 or [null](reserved.constants.php#constant.null)
, PHP uses environment variables such as TWO_TASK
(on Linux) or LOCAL
(on Windows) and ORACLE_SID
to determine theOracle instance
to connect to.
To use the Easy Connect naming method, PHP must be linked with Oracle 10_g_ or greater Client libraries. The Easy Connect string for Oracle 10_g_ is of the form:[//]host_name[:port][/service_name]. From Oracle 11_g_, the syntax is:[//]host_name[:port][/service_name][:server_type][/instance_name]. Further options were introduced with Oracle 19c, including timeout and keep-alive settings. Refer to Oracle documentation. 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 /your/path/to/instantclient/network/admin, ORACLEHOME/network/adminand/etc.Alternativelyset‘TNSADMIN‘sothatORACLE_HOME/network/adminand /etc. Alternatively set TNS_ADMIN
so that ORACLEHOME/network/adminand/etc.Alternativelyset‘TNSADMIN‘sothatTNS_ADMIN/tnsnames.ora is read. Make sure the web daemon has read access to the file.
encoding
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](oci8.constants.php#constant.oci-default)
,[OCI_SYSOPER](oci8.constants.php#constant.oci-sysoper)
and [OCI_SYSDBA](oci8.constants.php#constant.oci-sysdba)
. If either [OCI_SYSOPER](oci8.constants.php#constant.oci-sysoper)
or**[OCI_SYSDBA](oci8.constants.php#constant.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_connectto On
.
PHP 5.3 (PECL OCI8 1.3.4) introduced the**[OCI_CRED_EXT](oci8.constants.php#constant.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](oci8.constants.php#constant.oci-cred-ext)
flag can only be used with username of "/" and a empty password.oci8.privileged_connectmay be On
or Off
.
[OCI_CRED_EXT](oci8.constants.php#constant.oci-cred-ext)
may be combined with the**[OCI_SYSOPER](oci8.constants.php#constant.oci-sysoper)
** or**[OCI_SYSDBA](oci8.constants.php#constant.oci-sysdba)
** modes.
[OCI_CRED_EXT](oci8.constants.php#constant.oci-cred-ext)
is not supported on Windows for security reasons.
Return Values
Returns a connection identifier or [false](reserved.constants.php#constant.false)
on error.
Examples
Example #1 Basic oci_pconnect() Example using Easy Connect syntax
`<?php// Connects to the XE service (i.e. database) on the "localhost" machine
$conn = oci_pconnect('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 employees');
oci_execute($stid);
echo
"
" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . " | \n";
See oci_connect() for further examples of parameter usage.
See Also
- oci_connect() - Connect to an Oracle database
- oci_new_connect() - Connect to the Oracle server using a unique connection
Found A Problem?
php at jaggard dot org dot uk ¶
16 years ago
`[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.
`
gotankersley at NOSPAM dot com ¶
12 years ago
`Installed on CentOS 6.2, and had lots of trouble getting it to recognize tnsnames.ora. The fix for me was:
- 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 and by verifying that TNS_ADMIN is there.
- 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)
`