These functions allow you to access Oracle 10, Oracle 9, Oracle 8 and
Oracle 7 databases using the Oracle Call Interface (OCI). They
support binding of PHP variables to Oracle placeholders, have full
LOB, FILE and ROWID support, and allow you to use user-supplied
define variables.
You will need the Oracle client libraries to use this extension.
Windows users will need libraries with version at least 10 to use the
php_oci8.dll.
The most convenient way to install all the required files
is to use Oracle Instant Client, which is available from here:
http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html.
To work with OCI8 module "basic" version of Oracle Instant Client is
enough. Instant Client does not need ORACLE_SID or ORACLE_HOME environment
variables set. You still may need to set LD_LIBRARY_PATH and NLS_LANG, though.
Before using this extension, make sure that you have set up your
Oracle environment variables properly for the Oracle user, as well
as your web daemon user. These variables should be set up
before you start your web-server. The
variables you might need to set are as follows:
ORACLE_HOME
ORACLE_SID
LD_PRELOAD
LD_LIBRARY_PATH
NLS_LANG
For less frequently used Oracle environment variables such as
TNS_ADMIN, TWO_TASK, ORA_TZFILE, and the various Oracle
globalization settings like ORA_NLS33, ORA_NLS10 and the NLS_*
variables refer to Oracle documentation.
After setting up the environment variables for your webserver user,
be sure to also add the webserver user (nobody, www) to the oracle
group.
If your webserver doesn't start or crashes at startup:
Check that Apache is linked with the pthread library:
The maximum length of time (in seconds) that a given process is
allowed to maintain an idle persistent connection.
Setting this option to -1 means that idle persistent connections will
be maintained forever.
The length of time (in seconds) that must pass before issuing a ping
during oci_pconnect(). When set to 0, persistent
connections will be pinged every time they are reused. To disable
pings completely, set this option to -1.
Note:
Disabling pings will cause oci_pconnect() calls to operate at the
highest efficiency, but may cause PHP to not detect faulty connections,
such as those caused by network partitions, or if the Oracle server has
gone down since PHP connected, until later in the script. Consult the
oci_pconnect() documentation for more information.
This option controls oci_close() behaviour.
Enabling it means that oci_close() will do
nothing; the connection will not be
closed until the end of the script. This is for backward
compatibility only. If you find that you need to enable this
setting, you are strongly encouraged to
remove the oci_close() calls from your
application instead of enabling this option.
The constants below are defined by this extension, and
will only be available when the extension has either
been compiled into PHP or dynamically loaded at runtime.
Statement fetch mode. Used when the application knows
in advance exactly how many rows it will be fetching.
This mode turns prefetching off for Oracle release 8
or later mode. Cursor is cancelled after the desired
rows are fetched and may result in reduced server-side
resource usage.
You can easily access stored procedures in the same way as you
would from the command line.
Example 4. Using Stored Procedures
<?php // by webmaster at remoterealty dot com $sth = oci_parse($dbh, "begin sp_newaddress( :address_id, '$firstname', '$lastname', '$company', '$address1', '$address2', '$city', '$state', '$postalcode', '$country', :error_code );end;");
// This calls stored procedure sp_newaddress, with :address_id being an // in/out variable and :error_code being an out variable. // Then you do the binding:
The oci8 extension provides you with 3 different functions for
connecting to Oracle. It is up to you to use the most appropriate
function for your application, and the information in this section is
intended to help you make an informed choice.
Connecting to an Oracle server is a reasonably expensive operation, in
terms of the time that it takes to complete. The oci_pconnect()
function uses a persistent cache of connections that can be re-used
across different script requests. This means that you will typically
only incur the connection overhead once per php process (or apache child).
If your application connects to Oracle using a different set of
credentials for each web user, the persistent cache employed by
oci_pconnect() will become less useful as the
number of concurrent users increases, to the point where it may
start to adversely affect the overall performance of your Oracle
server due to maintaining too many idle connections. If your
application is structured in this way, it is recommended that
you either tune your application using the oci8.max_persistent and oci8.persistent_timeout
configuration settings (these will give you control over the
persistent connection cache size and lifetime) or use
oci_connect() instead.
Both oci_connect() and oci_pconnect()
employ a connection cache; if you make multiple calls to
oci_connect(), using the same parameters, in a
given script, the second and subsequent calls return the existing
connection handle. The cache used by oci_connect()
is cleaned up at the end of the script run, or when you explicitly close
the connection handle. oci_pconnect() has similar
behaviour, although its cache is maintained separately and survives
between requests.
This caching feature is important to remember, because it gives the
appearance that the two handles are not transactionally isolated (they
are in fact the same connection handle, so there is no isolation of any
kind). If your application needs two separate, transactionally isolated
connections, you should use oci_new_connect().
oci_new_connect() always creates a new connection to
the Oracle server, regardless of what other connections might already exist.
High traffic web applications should try to avoid using
oci_new_connect(), especially in the busiest sections of
the application.