oci_connect
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_connect — Connect to an Oracle database
Descrição
string
$username
,string
$password
,?string
$connection_string
= null
,string
$encoding
= "",int
$session_mode
= OCI_DEFAULT
): resource|false
Returns a connection identifier needed for most other OCI8 operations.
For performance, most applications should use persistent connections with oci_pconnect() instead of oci_connect(). See Connection Handling for general information on connection management and connection pooling.
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
-
Contém a
instância do Oracle
à qual se conectar. Pode ser uma » string Easy Connect ou um Connect Name do arquivo tnsnames.ora ou o nome de uma instância local do Oracle.Se não especificado ou
null
, o PHP usará variáveis de ambiente comoTWO_TASK
(no Linux) ouLOCAL
(no Windows) eORACLE_SID
para determinar ainstância do Oracle
à qual se conectar.Para usar o método de nomenclatura Easy Connect, o PHP precisa ter sido compilado com as bibliotecas Oracle Client 10g ou superiores. A string Easy Connect para o Oracle 10g tem o formato: [//]nome_do_servidor[:porta][/nome_do_servico]. A partir do Oracle 11g a sintaxe é: [//]nome_do_servidor[:porta][/nome_do_servico][:tipo_de_servidor][/nome_da_instancia]. Outras opções foram introduzidas com o Oracle 19c, incluindo as configurações de timeout e keep-alive. Consulte a documentação do Oracle. Os nomes dos serviços podem ser encontrados executando o utilitário Oracle
lsnrctl status
na máquina do servidor de banco de dados.O arquivo tnsnames.ora pode estar no caminho de pesquisa Oracle Net, que inclui /seu/caminho/para/instantclient/network/admin, $ORACLE_HOME/network/admin e /etc. Como alternativa, defina
TNS_ADMIN
para que $TNS_ADMIN/tnsnames.ora possa ser lido. Certifique-se de que o servidor web tem acesso de leitura ao arquivo. encoding
-
Determina o conjunto de caracteres usado pelas bibliotecas Oracle Client. O conjunto de caracteres não precisa corresponder ao conjunto de caracteres usado pelo banco de dados. Se não corresponderem, o Oracle fará o possível para converter os dados de e para o conjunto de caracteres do banco de dados. Dependendo dos conjuntos de caracteres, isso pode não fornecer resultados utilizáveis. A conversão também adiciona alguma sobrecarga de tempo.
Se não for especificado, as bibliotecas Oracle Client determinam um conjunto de caracteres a partir da variável de ambiente
NLS_LANG
.Passar este parâmetro pode reduzir o tempo necessário para conectar.
session_mode
-
Este parâmetro está disponível a partir do PHP 5 (PECL OCI8 1.1) e aceita os seguintes valores:
OCI_DEFAULT
,OCI_SYSOPER
eOCI_SYSDBA
. SeOCI_SYSOPER
ouOCI_SYSDBA
forem especificadas, esta função tentará estabelecer uma conexão privilegiada usando credenciais externas. Conexões privilegiadas estão desabilitadas por padrão. Para habilitá-las é preciso configurar oci8.privileged_connect paraOn
.O PHP 5.3 (PECL OCI8 1.3.4) introduziu o valor de modo
OCI_CRED_EXT
. Ele informa ao Oracle para usar autenticação External ou OS, que deve ser configurada no banco de dados. A flagOCI_CRED_EXT
só pode ser usada com o usuário "/" e uma senha vazia. oci8.privileged_connect pode serOn
ouOff
.OCI_CRED_EXT
pode ser combinado com os modosOCI_SYSOPER
ouOCI_SYSDBA
.OCI_CRED_EXT
não é suportado no Windows por razões de segurança.
Valor Retornado
Returns a connection identifier or false
on error.
Registro de Alterações
Versão | Descrição |
---|---|
8.0.0, PECL OCI8 3.0.0 |
connection_string is now nullable.
|
Exemplos
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
?>
Notas
Note:
An incorrectly installed or configured OCI8 extension will often manifest itself as a connection problem or error. See Installing/Configuring for troubleshooting information.
Veja Também
- oci_pconnect() - Connect to an Oracle database using a persistent connection
- oci_new_connect() - Connect to the Oracle server using a unique connection
- oci_close() - Closes an Oracle connection