|  | 
 
 
  oci_connectConnect to an Oracle database 
  Description
   resource oci_connect
    ( string $username, string$password[, string$connection_string[, string$character_set[, int$session_mode]]] ) 
   See Connection Handling for
   general information on connection management and connection
   pooling.
   
   From PHP 5.1.2 (PECL OCI8 1.1) oci_close can
   be used to close the connection.
   
   The second and subsequent calls to oci_connect
   with the same parameters will return the connection handle returned
   from the first call. This means that transactions in one handle are
   also in the other handles, because they use the
   same underlying database connection. If two
   handles need to be transactionally isolated from each other, use
   oci_new_connect instead.
   
  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)
orLOCAL(on Windows)
andORACLE_SIDto 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_LANGenvironment 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_SYSOPERandOCI_SYSDBA.
If eitherOCI_SYSOPERorOCI_SYSDBAwere 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_EXTmode value. This tells Oracle to use
External or OS authentication, which must be configured in the
database.  TheOCI_CRED_EXTflag can only be used
with username of "/" and a empty password.
oci8.privileged_connect
may be On or Off. 
OCI_CRED_EXTmay be combined with theOCI_SYSOPERorOCI_SYSDBAmodes. 
OCI_CRED_EXTis not supported on Windows for
security reasons. 
  Return Values
   Returns a connection identifier or FALSEon error. 
  Examples
    
    Example #1 Basic oci_connect using Easy Connect syntax 
<?php
 // Connects to the XE service (i.e. database) on the "localhost" machine
 $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 employees');
 oci_execute($stid);
 
 echo "<table border='1'>\n";
 while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
 echo "<tr>\n";
 foreach ($row as $item) {
 echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
 }
 echo "</tr>\n";
 }
 echo "</table>\n";
 
 ?>
 
    
    Example #2 Basic oci_connect using a Network Connect name 
<?php
 // Connects to the MYDB database described in tnsnames.ora file,
 // One example tnsnames.ora entry for MYDB could be:
 //   MYDB =
 //     (DESCRIPTION =
 //       (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.oracle.com)(PORT = 1521))
 //       (CONNECT_DATA =
 //         (SERVER = DEDICATED)
 //         (SERVICE_NAME = XE)
 //       )
 //     )
 
 $conn = oci_connect('hr', 'welcome', 'MYDB');
 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 "<table border='1'>\n";
 while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
 echo "<tr>\n";
 foreach ($row as $item) {
 echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
 }
 echo "</tr>\n";
 }
 echo "</table>\n";
 
 ?>
 
    
    Example #3 oci_connect with an explicit character set 
<?php
 $conn = oci_connect('hr', 'welcome', 'localhost/XE', 'AL32UTF8');
 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 "<table border='1'>\n";
 while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
 echo "<tr>\n";
 foreach ($row as $item) {
 echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
 }
 echo "</tr>\n";
 }
 echo "</table>\n";
 
 ?>
 
    
    Example #4 Using multiple calls to oci_connect 
<?php
 $c1 = oci_connect("hr", "welcome", 'localhost/XE');
 $c2 = oci_connect("hr", "welcome", 'localhost/XE');
 
 // Both $c1 and $c2 show the same PHP resource id meaning they use the
 // same underlying database connection
 echo "c1 is $c1<br>\n";
 echo "c2 is $c2<br>\n";
 
 function create_table($conn)
 {
 $stmt = oci_parse($conn, "create table hallo (test varchar2(64))");
 oci_execute($stmt);
 echo "Created table<br>\n";
 }
 
 function drop_table($conn)
 {
 $stmt = oci_parse($conn, "drop table hallo");
 oci_execute($stmt);
 echo "Dropped table<br>\n";
 }
 
 function insert_data($connname, $conn)
 {
 $stmt = oci_parse($conn, "insert into hallo
 values(to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");
 oci_execute($stmt, OCI_DEFAULT);
 echo "$connname inserted row without committing<br>\n";
 }
 
 function rollback($connname, $conn)
 {
 oci_rollback($conn);
 echo "$connname rollback<br>\n";
 }
 
 function select_data($connname, $conn)
 {
 $stmt = oci_parse($conn, "select * from hallo");
 oci_execute($stmt, OCI_DEFAULT);
 echo "$connname ----selecting<br>\n";
 while (oci_fetch($stmt)) {
 echo "    " . oci_result($stmt, "TEST") . "<br>\n";
 }
 echo "$connname ----done<br>\n";
 }
 
 create_table($c1);
 
 insert_data('c1', $c1);   // Insert a row using c1
 sleep(2);                 // sleep to show a different timestamp for the 2nd row
 insert_data('c2', $c2);   // Insert a row using c2
 
 select_data('c1', $c1);   // Results of both inserts are returned
 select_data('c2', $c2);   // Results of both inserts are returned
 
 rollback('c1', $c1);      // Rollback using c1
 
 select_data('c1', $c1);   // Both inserts have been rolled back
 select_data('c2', $c2);
 
 drop_table($c1);
 
 // Closing one of the connections makes the PHP variable unusable, but
 // the other could be used
 oci_close($c1);
 echo "c1 is $c1<br>\n";
 echo "c2 is $c2<br>\n";
 
 
 // Output is:
 //    c1 is Resource id #5
 //    c2 is Resource id #5
 //    Created table
 //    c1 inserted row without committing
 //    c2 inserted row without committing
 //    c1 ----selecting
 //        09-DEC-09 12:14:43
 //        09-DEC-09 12:14:45
 //    c1 ----done
 //    c2 ----selecting
 //        09-DEC-09 12:14:43
 //        09-DEC-09 12:14:45
 //    c2 ----done
 //    c1 rollback
 //    c1 ----selecting
 //    c1 ----done
 //    c2 ----selecting
 //    c2 ----done
 //    Dropped table
 //    c1 is
 //    c2 is Resource id #5
 
 ?>
 
  NotesNote: 
    
    An incorrectly installed or configured OCI8 extension will often
    manifest itself as a connection problem or error.
    See Installing/Configuring for
    troubleshooting information.
   
 
  See Also
    
    oci_pconnectoci_new_connectoci_close |