
Conectar PHP con Oracle
#1
Escrito 22 octubre 2011 - 01:22
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
#2
Escrito 25 octubre 2011 - 07:18
$login1 = ocilogon("fulano", "clave", $db); $query = ociparse($login1,"select * from fulano.tabla"); ociexecute($query);
Esa es una forma de hacerlo, para mas info aqui.
Saludos.
#3
Escrito 26 octubre 2011 - 06:07
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.
#4
Escrito 26 octubre 2011 - 07:31
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
$conexion=@OCILogon('username','password','DBNAME'); $err=OciError(); if ($err){ echo 'Error de comunicación con la BD. '.$err['code'].' '.$err['message'].' '.$err['sqltext']; }
Saludos
Archivos adjuntos
#5
Escrito 02 noviembre 2011 - 10:33
#6
Escrito 24 noviembre 2011 - 01:49
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.
#7
Escrito 24 noviembre 2011 - 02:01
$dbtest= "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']; }
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:
TNSPING <tnsname>
Donde tns_name es el nombre de tu base de datos.
Saludos
#8
Escrito 24 noviembre 2011 - 03:20
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.
#9
Escrito 24 noviembre 2011 - 03:38
Publica aquí lo que tengas en las variables ORACLE_HOME
Saludos
#10
Escrito 25 noviembre 2011 - 05:55
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.