+3

HOWTO: Configurando PHP para conectar ao Oracle

criado por Marcos Regis em 25/02/2010 10:46pm
Testando tudo

Para confirmar que o PHP está realmente configurado para conectar a um servidor Oracle (local ou remoto) crie um arquivo de nome con_oracle.php</> com o seguinte conteúdo :

    **NOTA** O conteúdo abaixo utiliza como parâmetros os dados 
    de acesso ao meu servidor de testes
. Caso deseje testar seu
    pr
óprio servidor altere os dados de conexão.

<?php
$sql
= "SELECT * FROM USUARIO";
$usuario
= 'demo';
$senha
= 'demo';
$host
= 'oracle.marcosregis.com';
$porta
= '1521';

try
{
  echo
'<h3>Teste de conexão com servidor Oracle</h3>';
########### OCI
  echo
'<h5>Tentando conectar ao servidor usando a extensão oci</h5>';
 
if(!$con = oci_connect($usuario,$senha,"$host:$porta"))
 
{
    $e
= oci_error();
   
throw new Exception("Erro ao conectar ao servidor usando a extensão OCI - " . $e['message']);
 
}
  echo
'<h4>Sucesso!</h4>';
  echo
'<h5>Tentando executar instrução "' .$sql . ' usando a a extensão OCI"</h5>';
 
if(!$stmt = oci_parse($con,$sql))
 
{
    $e
= oci_error($stmt);
   
throw new Exception("Erro ao preparar consulta - " . $e['message']);
 
}
 
if(!oci_execute($stmt))
 
{
    $e
= oci_error($con);
   
throw new Exception("Erro ao executar consulta - " . $e['message']);
 
}
  echo
'<h4>Sucesso!</h4>';
 
if(oci_fetch_all($stmt,$results,0,-1,OCI_ASSOC+OCI_RETURN_NULLS)>0)
 
{
    echo
'<h5>Exibindo dados retornados pela extensão OCI"</h5>';
    echo
"<table border='1'>\n";
   
foreach($results as $row )
   
{
      echo
"<tr>\n";
     
foreach ($row as $item)
     
{
        echo
"    <td>".($item!==null?htmlentities($item, ENT_QUOTES):" ")."</td>\r\n";
     
}
      echo
"</tr>\n";
      oci_close
($con);
   
}
    echo
"</table>\n";
 
}
 
else
 
{
    echo
'<h5>A consulta não retornou dados.</h5>';
 
}

########### PDO

  echo
'<h5>Tentando conectar ao servidor usando PDO</h5>';
 
try
 
{
    $pdo
= new PDO("oci:dbname=//$host:$porta",$usuario,$senha);
 
}
 
catch(PDOException $e)
 
{
   
throw new Exception("Erro ao conectar ao servidor usando a extensão OCI - " . $e->getMessage());
 
}
  echo
'<h4>Sucesso!</h4>';
  echo
'<h5>Tentando executar instrução "' .$sql . ' usando PDO"</h5>';
 
if(!$stmt = $pdo->prepare($sql))
 
{
    $e
= $pdo->errorInfo();
   
throw new Exception("Erro ao preparar consulta - " . $e[2]);
 
}
 
if(!$stmt->execute())
 
{
    $e
= $stmt->errorInfo();
   
throw new Exception("Erro ao preparar consulta - " . $e[2]);
 
}
  echo
'<h4>Sucesso!</h4>';
 
if($results = $stmt->fetchAll(PDO::FETCH_ASSOC))
 
{
    echo
'<h5>Exibindo dados retornados pela extensão PDO"</h5>';
    echo
"<table border='1'>\n";
   
foreach($results as $row )
   
{
      echo
"<tr>\n";
     
foreach ($row as $item)
     
{
        echo
"    <td>".($item!==null?htmlentities($item, ENT_QUOTES):" ")."</td>\r\n";
     
}
      echo
"</tr>\n";
   
}
    echo
"</table>\n";
 
}
 
else
 
{
    echo
'<h5>A consulta não retornou dados.</h5>';
 
}

}
catch(Exception $e)
{
 
die("ERRO! Detalhes => " . $e->getMessage());
}

Chame-o no navegador e veja o resultado.
Espero que seja útil.
Qualquer dúvida estarei a disposição para esclarecê-las.

Comentários:

Mostrando 1 - 6 de 6 comentários
Jean Freitas disse:
o meu aparece esse erro no navegador

Fatal error: Uncaught Error: Call to undefined function oci_connect() in C:\xampp\htdocs\aulaphp\teste.php:21 Stack trace: #0 {main} thrown in C:\xampp\htdocs\aulaphp\teste.php on line 21

linha 21

[ if (!$con = oci_connect($usuario, $senha, "$host:$porta")) ]


//$sql = "select * from usuarios";
//$usuario = 'teste';
//$senha = 'teste';
//$host = '127.0.0.1';
//$porta = '1521';
22/09/2016 3:49pm (~8 anos atrás)

o meu não funcionou
06/04/2013 10:44pm (~12 anos atrás)

Marcos Regis disse:
Simei, desculpe a demora em responder (provavelmente já tenha solucionado).
O maoir problema com o suporte de PHP a Oracle com o IIS é o PATH.
No IIS tem como você verificar qual o PATH que ele está utilizando. Verifique se no PATH está o caminho para o instantclient.
Outra coisa são as permissão de execução/acesso aos binários dentro do diretório do instantclient.
Como você não é o primeiro a me perguntar isso, estou atualizando o tutorial para utilizar o PHP 5.3 e vou criar uma versão com o IIS em Windows XP, Seven e Server.
31/01/2011 8:36pm (~14 anos atrás)

simei smoler disse:
Olá Marcos, primeiramente obrigado pelo passo a passo não se acha quase nada na net sobre o assunto, vamos a dúvida.... fiz tudo que vc falou e tá tudo redondinho no phpinfo... no teste com o servidor oracle etc... o detalhe é que ao invés de Apache eu estou usando IIS 7, você sabe alguma coisa sobre o assunto? se tem que fazer alguma configuração a mais? porque dá erro 500 no IIS 7. Precisa ser no IIS porque existem outras aplicações em aspx no mesmo servidor.
21/12/2010 3:33pm (~14 anos atrás)

Marcos Regis disse:
Então Lucas, na verdade não coloquei no título, mas a configuração se faz necessário para se conectar a um servidor Oracle REMOTO. Quando você instala um Servidor Oracle localmente, essa instalação cria todos os procedimenos para que seja possível acessar localmente tornando as coisas mais simples.
30/06/2010 4:29pm (~14 anos atrás)

eu instalei a versão g10, quando fui ver a variavel de ambiente, ja estava la:

C:\wamp\bin\oracle\app\oracle\product\10.2.0\server\bin

falou.
30/06/2010 4:14pm (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)