oci_connect

(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)

oci_connectConecta a una base de datos de Oracle

Descripción

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

Devuelve un identificador de conexión necesario para la mayoría de las operaciones de OCI8.

Véase Manejo de conexiones para obtener información general sobre la gestión y agrupamiento de conexiones.

Desde PHP 5.1.2 (PECL OCI8 1.1), se puede usar oci_close() para cerrar conexiones.

La segunda y subsiguientes llamadas a oci_connect() con los mismos parámetros devolverán el gestor de conexión devuelto desde la primera llamada. Esto significa que las transacciones de un gestor también son las de los demás gestores, ya que usan la misma conexión subyacente a la base de datos. Si dos gestores necesitan ser aislados transaccionalmente uno de otro, use oci_new_connect() en su lugar.

Parámetros

username

El nombre de usuario de Oracle.

password

La contraseña para username.

connection_string

Contiene la instancia de Oracle a la que conectarse. Puede ser una » cadena de Conexión Sencilla (Easy Connect), o un Nombre de Conexión del fichero tnsnames.ora, o el 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 de Oracle a la que conectarse.

Para utilizar el método de nomenclatura de Conexión Sencila, PHP debe estar vinculado con las bibliotecas cliente de Oracle 10g o superiores. La cadena de Conexión Sencilla para Oracle 10g se utiliza de la siguiente forma: [//]nombre_host[:puerto][/nombre_servicio]. Desde Oracle 11g, la sintaxis es: [//]nombre_host[:puerto][/nombre_servicio][:tipo_servicio][/nombre_instancia]. Los nombres de servicio pueden encontrarse ejecuntado la utilidad de Oracle lsnrctl status en el servidor donde se encuentra la base de datos.

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

character_set

Determina el juego de caracteres usado por las bibliotecas cliente de Oracle. El juego de caracteres no tiene por que coinicidir con el utilizado en la base de datos. Si no coinicide, Oracle intentará hacer lo posible para convertir los datos entre los dos juegos de caracteres. Dependiendo del juego de caracteres que se esté usando, podría no proporcionarse resultados útiles. La conversión también añade algo de carga extra de tiempo.

Si no se especifica, las bibliotacas cliente de Oracle determinarán el juego de caracteres desde la variable de entorno NLS_LANG.

Pasar este parámetro puede reducir el tiempo que toma en conectarse.

session_mode

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

En PHP 5.3 (PECL OCI8 1.3.4) se introdujo el valor de modo OCI_CRED_EXT. Esto indica a Oracle que utilice la autenticación Externa o del SO, la cual debe estar configurada en la base de datos. La bandera OCI_CRED_EXT sólo puede usarse con el nombre de usuario "/" y la contraseña en blanco. oci8.privileged_connect podría ser On o Off.

OCI_CRED_EXT podría estar en combinación con los modos OCI_SYSOPER o OCI_SYSDBA.

OCI_CRED_EXT no se admite en Windows por razones de seguridad.

Valores devueltos

Devuelve un identificador de conexión, o FALSE en caso de error.

Ejemplos

Ejemplo #1 Uso básico de oci_connect() utilizando la sintaxis de Easy Connect

<?php

// Conectar al servicio XE (es deicr, la base de datos) en la máquina "localhost"
$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) : "") . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Ejemplo #2 Uso básico de oci_connect() utilizando un nombre de Network Connect

<?php

// Conectar a la base de datos MYDB descrita en el fichero tnsnames.ora,
// Un ejemplo de una entrada de tnsnames.ora para MYDB podría ser:
//   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) : "") . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Ejemplo #3 oci_connect() con un conjunto de caracteres explícito

<?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) : "") . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Ejemplo #4 Usar múltiples llamadas a oci_connect()

<?php

$c1 
oci_connect("hr""welcome"'localhost/XE');
$c2 oci_connect("hr""welcome"'localhost/XE');

// $c1 y $c2 muestran el mismo id de recurso de PHP, ya que usan la
// misma conexión subyacente a la base de datos
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);   // Insertar una fila usando c1
sleep(2);                 // Dormir para mostrar una marca de tiempo diferente en la 2ª fila
insert_data('c2'$c2);   // Insertar una fila usando c2

select_data('c1'$c1);   // Son devueltas ambas inserciones
select_data('c2'$c2);   // Son devueltas ambas inserciones

rollback('c1'$c1);      // Revertir usando c1

select_data('c1'$c1);   // Ambas inserciones han sido revertidas
select_data('c2'$c2);

drop_table($c1);

// El cierre de una de las conexiones hace que la variable de PHP sea inutilizable, aunque
// se podría utilizar la otra
oci_close($c1);
echo 
"c1 is $c1<br>\n";
echo 
"c2 is $c2<br>\n";


// La salida es:
//    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:

Una instalación o configuración incorrecta de la extensión OCI8 a menudo se manifestará como un problema o error de conexión. Véase la sección Instalación/Configuración para obtener información sobre la solución de problemas.

Ver también

  • oci_pconnect() - Conectar a una base de datos de Oracle usando una conexión persistente
  • oci_new_connect() - Conectar al servidor de Oracle usando una conexión única
  • oci_close() - Cierra una conexión a Oracle