OCI8 Funciones
PHP Manual

oci_connect

(PHP 5, PECL OCI8 >= 1.1.0)

oci_connectConnect to an Oracle database

Descripción

resource oci_connect ( string $username , string $password [, string $connection_string [, string $character_set [, int $session_mode ]]] )

Returns a connection identifier needed for most other OCI8 operations.

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.

Parámetros

username

The Oracle user name.

password

The password for username.

connection_string

Contiene la Instancia Oracle a conectarse. Puede ser una » Cadena de fácil conexión, o un Nombre de Conexión del fichero tnsnames.ora, o del nombre de una instancia local de Oracle.

Si no se especifica, PHP utiliza variables de entorno como TWO_TASK (en Linux) o LOCAL (en Windows) y ORACLE_SID para determinar la instancia Oracle a conectarse.

Para utilizar el método de conexión fácil de nomenclatura, PHP debe estar enlazado con Oracle con las librerias de cliente 10g o superiores. La cadena de fácil conexión para Oracle de 10g se usa de la siguiente forma: [//]host_name[:port][/service_name]. Con Oracle 11g, la sintaxis es: [//]host_name[:port][/service_name][:server_type][/instance_name]. Los nombres de servicio pueden encontrarse ejecuntado la utilidad de Oracle lsnrctl status en el servidor donde está la base de datos.

El fichero tnsnames.ora puede estar en la ruta de búsqueda de la red de Oracle, que incluye $ORACLE_HOME/network/admin y /etc. De forma alternativa define TNS_ADMIN para que $TNS_ADMIN/tnsnames.ora sea leído. Asegúrse que el dominio web tiene acceso de lectura al fichero.

character_set

Determina el juego de caracteres usado por las librerías cliente de Oracle. El juego de caracteres no tiene porque coinicidir con el que está definido en la base de datos. Si no coinicide, Oracle intentará hacer lo posible para convertir los datos en el juego de caracteres de la base de datos. Dependiendo del tipo de juego de caracteres que se este usando puede no dar resultados útiles. La conversión también añade sobrecarga en el tiempo.

Si no es especificado, las librerias cliente de Oracle determinan el juego de caracteres desde la variable global NLS_LANG.

Pasar este parámetro puede reducir tiempo de conexión.

session_mode

Este parámetro está disponible desde la versión PHP 5 (PECL OCI8 1.1) y acepta los siguientes valores: OCI_DEFAULT, OCI_SYSOPER y OCI_SYSDBA. Si cualquiera de OCI_SYSOPER o OCI_SYSDBA son especificados, esta función intentará establecer una conexión privilegiada con las credenciales exteriores. Las conexiones privilegiadas están desactivadas por defecto. Para activarlas tiene que establecer oci8.privileged_connect a On.

En PHP 5.3 (PECL OCI8 1.3.4) se introdujo el modo valor OCI_CRED_EXT. Esto indica a Oracle usar External o autenticación OS , que debe estar configurado en la base de datos. La flag OCI_CRED_EXT sólo puede ser usada con el nombre de usuario "/" y la contraseña en blanco. oci8.privileged_connect puede que esté On o Off.

OCI_CRED_EXT puede que esté en combinación con los modos OCI_SYSOPER o OCI_SYSDBA.

OCI_CRED_EXT no está soportado en Windows por razones de seguridad.

Valores devueltos

Returns a connection identifier or FALSE on error.

Ejemplos

Ejemplo #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($stidOCI_ASSOC+OCI_RETURN_NULLS)) {
    echo 
"<tr>\n";
    foreach (
$row as $item) {
        echo 
"    <td>" . ($item !== null htmlentities($itemENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Ejemplo #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($stidOCI_ASSOC+OCI_RETURN_NULLS)) {
    echo 
"<tr>\n";
    foreach (
$row as $item) {
        echo 
"    <td>" . ($item !== null htmlentities($itemENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Ejemplo #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($stidOCI_ASSOC+OCI_RETURN_NULLS)) {
    echo 
"<tr>\n";
    foreach (
$row as $item) {
        echo 
"    <td>" . ($item !== null htmlentities($itemENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Ejemplo #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($stmtOCI_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($stmtOCI_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

?>

Notas

Nota:

An incorrectly installed or configured OCI8 extension will often manifest itself as a connection problem or error. See Installing/Configuring for troubleshooting information.

Nota:

In PHP versions before 5.0.0 use ocilogon() instead. El nombre viejo de la función todavía puede ser utilizado en versiones actuales, sin embargo es obsoleto y no se recomienda.

Ver también


OCI8 Funciones
PHP Manual