oci_new_connect
Connect to the Oracle server using a unique connection
Description
resourcefalse oci_new_connect(
string $username
,
string $password
,
stringnull $connection_string
= null
,
string $encoding
= "",
int $session_mode
= OCI_DEFAULT
)
Unlike oci_connect and
oci_pconnect, oci_new_connect
does not cache connections and will always return a brand-new freshly
opened connection handle. This is useful if your application needs
transactional isolation between two sets of queries.
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
, 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].
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, $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.
-
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
,
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.
OCI_CRED_EXT
is not supported on Windows for
security reasons.
Return Values
Returns a connection identifier or false
on error.
Examples
The following demonstrates how you can separate connections.
Example #1 oci_new_connect example
<?php
// create table mytab (mycol number);
function query($name, $c)
{
echo "Querying $name\n";
$s = oci_parse($c, "select * from mytab");
oci_execute($s, OCI_NO_AUTO_COMMIT);
$row = oci_fetch_array($s, OCI_ASSOC);
if (!$row) {
echo "No rows\n";
} else {
do {
foreach ($row as $item)
echo $item . " ";
echo "\n";
} while (($row = oci_fetch_array($s, OCI_ASSOC)) != false);
}
}
$c1 = oci_connect("hr", "welcome", "localhost/orcl");
$c2 = oci_new_connect("hr", "welcome", "localhost/orcl");
$s = oci_parse($c1, "insert into mytab values(1234)");
oci_execute($s, OCI_NO_AUTO_COMMIT);
query("basic connection", $c1);
query("new connection", $c2);
oci_commit($c1);
query("new connection after commit", $c2);
// Output is:
// Querying basic connection
// 1234
// Querying new connection
// No rows
// Querying new connection after commit
// 1234
?>
See oci_connect for further examples of parameter usage.