Ir al contenido


Foto

Conectar PHP con Oracle


  • Por favor identifícate para responder
9 respuestas en este tema

#1 nolberto

nolberto

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 22 octubre 2011 - 01:22

Hola amigos (as) de la Comunidad.

Quiero saber como se puede conectar PHP con Oracle, sé que hay que activar unas extensiones en PHP pero si no está bien la configuración, entonces no sirve de nada, por eso quiero saber cuales son esas configuraciones y si el Oracle está en otro servidor.

Saludos
Luis
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 25 octubre 2011 - 07:18

Primeramente hay que activar la extension php_ocixx.dll donde "x" es la version de oracle en PHP.ini, para conectarte a ella hacemos lo siguiente:



php
  1. $login1 = ocilogon("fulano", "clave", $db);
  2.  
  3. $query = ociparse($login1,"select * from fulano.tabla");
  4. ociexecute($query);



Esa es una forma de hacerlo, para mas info aqui.

Saludos.
  • 0

#3 nolberto

nolberto

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 26 octubre 2011 - 06:07

Buen día Enecumene.

Gracias por tu respuesta, pero el código de conexión no necesariamente va conectar al Oracle a pesar que se ha desactivado los dll correspondiente como indicas, he leido que hay una configuración a parte que se tienes que hacer como el reconocimiento sel Services_name (SID), el Oracle_path, el puerto, entre otras cosas, eso en la variable de entrono de windows, eso es la duda que tengo para que mi código de conexión al Oracle pueda funcionar.

Nota.
El servidor Oracle está en un servidor a parte no está localmente.

Saludos.
Luis.
  • 0

#4 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 26 octubre 2011 - 07:31

Yo tengo un sistema PHP conectado con Oracle, la verdad no he tenido problemas al conectar.

Los pasos que recuerdo son:

Instalé el cliente oracle, aquí lo importante es que sea un cliente 10g o superior si es que vas a utilizar OCI para conectar.

Si estás en windows, procura que el nombre de las carpetas en donde instalaste el cliente no contenga espacios o puntos para evitar problemas. Además debes incluir esta carpeta en la variable de entorno PATH.

Realiza primero una prueba de conexión desde el equipo que tiene instalado PHP, prueba con TNSping para saber si obtienes respuesta de la base de datos.

Si puedes conectarte sigue los pasos que te indica enecumene y debería funcionar.

Utiliza la función phpinfo() para averiguar si la extensión OCI fue cargada con PHP (observa la imagen adjunta a este mensaje)

Si algo falla trata de mostrar el error utilizando la función ociError de php para saber qué está pasando



php
  1.             $conexion=@OCILogon('username','password','DBNAME');
  2.             $err=OciError();
  3.             if ($err){
  4.               echo 'Error de comunicación con la BD. '.$err['code'].' '.$err['message'].' '.$err['sqltext'];
  5.             }



Saludos

Archivos adjuntos


  • 0

#5 kosios

kosios

    Member

  • Miembros
  • PipPip
  • 39 mensajes

Escrito 02 noviembre 2011 - 10:33

mira amigo a mi me llevo mucho tiempo lograrlo, pero por no saber al respecto, tienes q activar esta libreria ;extension=php_oci8.dll q la encuentras en el phpini, sin esa libreria no haces nada.
  • 0

#6 nolberto

nolberto

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 24 noviembre 2011 - 01:49

Hola Hector y todos de la comunidad.

He realizado los pasos anteriores:
descomenté el oci8 de mi php.ini
direccioné el la variable de entorno el path al directorio de mi instantclient de oracle
añadí en el regedit el tns_admin direccionando al directorio de instantclient
Pero sale este error

Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries in D:\Servidor\wamp\www\admision\usuario\clase\Cnx.php on line 19

Warning: ocierror() [function.ocierror]: OCIError: unable to find error handle in D:\Servidor\wamp\www\admision\usuario\clase\Cnx.php on line 20


Este es mi código


$db_test = '(DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS =
          (COMMUNITY = tcp.world)
          (PROTOCOL = TCP)
          (Host = 198.48.0.124)
          (Port = 1522)
        )
)
(CONNECT_DATA = (SID = amauta)
)
)';
$c = oci_connect("admin", "demo",$db_test);
$err=OciError();
            if ($err){
              echo 'Error de comunicación con la BD. '.$err['code'].' '.$err['message'].' '.$err['sqltext'];
            }


Este es la información que me entrega el phpinfo(), disculpen pues no encontre un campo para subir la imagen :) 

oci8

OCI8 Support enabled
Version 1.2.4
Revision $Revision: 1.269.2.16.2.38 $
Active Persistent Connections 0
Active Connections 0
Temporary Lob support enabled
Collections support enabled

Directive Local Value Master Value
oci8.default_prefetch 10 10
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics no value no value
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20


Saludo.
Luis.
  • 0

#7 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 24 noviembre 2011 - 02:01

Prueba algo como esto



php
  1. $dbtest= "amauta";
  2. $c = oci_connect("admin", "demo",$db_test);
  3. $err=OciError();         
  4. if ($err){
  5.               echo 'Error de comunicación con la BD. '.$err['code'].' '.$err['message'].' '.$err['sqltext'];           
  6. }



Es decir, en el tercer parámetro envía solamente el TNSNAME de tu base de datos.

Te recomiendo que te asegures antes de probar conexión desde PHP que tienes conexión desde el cliente de oracle.

Prueba con el comando para comprobar si la base de datos responde:



delphi
  1.   TNSPING <tnsname>



Donde tns_name es el nombre de tu base de datos.

Saludos
  • 0

#8 nolberto

nolberto

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 24 noviembre 2011 - 03:20

Hola Hector.

Presenta el mismo error


Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries in D:\Servidor\wamp\www\admision\usuario\clase\Cnx.php on line 29

Warning: ocierror() [function.ocierror]: OCIError: unable to find error handle in D:\Servidor\wamp\www\admision\usuario\clase\Cnx.php on line 30


Yo le hago ping al servidor de base de datos
También estoy usando el plsql para conectarme a la base de datos y hacer mis consultas
Entonces si me conecto con el plsql por qué no el conecta el php si he agregado el instantclient y he creado los variables de entorno como el Path y tns_admin, que otra cosa me estará faltando ( mi windos es xp)

Saludos
Luis.
  • 0

#9 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 24 noviembre 2011 - 03:38

En una ventana de comandos del sistema operativo ejecuta el comando SET.

Publica aquí lo que tengas en las variables ORACLE_HOME

Saludos
  • 0

#10 nolberto

nolberto

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 25 noviembre 2011 - 05:55

Hola Héctor.

Ejecutando el comando en cmd no me sale nada en ORACLE_HOME, porque no está configurado si establesco un valor a la variable, hace conflico con el form y report que tengo instaldo y no puedo ingresar a la base de datos Oracle con el plsql.
Por eso realicé nuevamente la conexión de PHP con Oracle en una máquina virtual y los pasos como:
Descomentar el oci8 en el php.ini
Descargar el cliente de Oracle instantclient_11
Configurar en el path de la variable de entorno
Y por último ejecutar el código para probar la conexión y si respondió



$db_test = '(DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS =
          (COMMUNITY = tcp.world)
          (PROTOCOL = TCP)
          (Host = 198.48.0.124)
          (Port = 1522)
        )
  )
      (CONNECT_DATA = (SID = amauta)
      )
  )';

$c = oci_connect("admin", "demo",$db_test);

            if ($c){
              echo 'La conexión establecida';
            }else{
                  $err=OciError();
                echo 'Error de comunicación con la BD. '.$err['code'].' '.$err['message'].' '.$err['sqltext'];
            }



Ahora el problema está en mi computadora, voy tener que investigar porqué el problema, por lo  pronto los paso que seguí en la computadora virtual están muy bien. :)

Gracias a todos por su tiempo y dar ideas de como solucionar el problema
Saludos.
Luis.
  • 0




IP.Board spam blocked by CleanTalk.