(PHP 5, PECL OCI8 >= 1.1.0)
oci_connect — Connect to an Oracle database
$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.
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.
Returns a connection identifier or FALSE
on error.
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($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";
?>
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($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";
?>
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($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";
?>
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($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
?>
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.