Php y Oracle II
Enviado por admin el Jue, 03/06/2004 - 13:53.
Clasificado en:
Uno de los post más 'famosos' es el de oracle. Realmente, es un dolor de muelas trabajar con Oracle, pero que da dinero, da dinero.
Nuevos consejos, como continuación del post Php y Oracle:
- Existen dos extensiones PHP para Oracle: php_oracle y php_oci8. La primera tiene menos funcionalidades, pero es más probable que funcione en una instalación rápida. La segunda tiene más prestaciones y es más rápida, pero deben asegurarse de que su versión del Cliente de Oracle sea igual o superior a la 1.81
- Recuerden que deben descargar el cliente de Oracle e INSTALARLO, y que la versión del cliente debe ser IGUAL O SUPERIOR a 8.1. Repito, repito, repito....
- Instalación: Si ocupan *unix, compilen su PHP con --with-oracle[=DIR] (no recomendado) o --with-oci8[=DIR] , siendo DIR por defecto la variable del entorno ORACLE_HOME; lean el manual para mayores detalles. Para Windows, descomenten en su php.ini la extension php_oracle.dll o php_oci8.dll
- Reinicien el computador después de instalar Oracle. En un Windows 2000 con IIS, no agarraba el dll hasta que apagaron el bicho
- Si al usar adodb les dice que no encuentra ora_logon, hagan la siguiente revisión:
- Instalar el paquete de Oracle
- Compilar con soporte para oracle y/o descomentar en el php.ini las entradas correspondientes
- Reiniciar la máquina
- Usar en
ADONewConnection()como parámetro la versión de la extensión de oracle con la cual van a trabajar. Ergo,$db = ADONewConnection("oracle");para php_oracle y$db = ADONewConnection("oci8");para la oci8. No confundirse!
Eso por ahora. Espero que les sea de alguna utilidad....
- 33145 lecturas

Hola:
¿Donde puedo bajar la versión actualizada de la oci.dll?, necesito actualizarla porque es la única manera de que me funione la programación de php con oracle.
Muchas gracias.
Cecilia.
La última versión de php_oci.dll se encuentra en la distribución estándar de php, que esta en php.net. Es un poco más problemático en Linux, ya que tienes que bajar e instalar las librerías de Oracle antes de intentar siquiera compilar el módulo. Recuerda también el tema de las versiones; con un php posterior a 4.1, necesitas el cliente 8.1 o superior de Oracle.
HolaCLAUDIO: Soy del CCAA de psic. de la UdeC y no puedo contactarte para el asunto de la asesoria web que nos ofreciste. Por favor enviame un correo a rdresdner@udec.cl, o rafadrevi@hotmail.com. GRACIAS
Hola, estoy intentando hacer una pagina web con php que se conecte a una base de datos oracle para ello
tengo instalado php y apache en window y oracle en otra maquina linux.En el php.ini estan descomentadas las
dos lineas( php_oracle.dll , php_oci8.dll ) pero no tengo instalado ningun cliente de oracle.
Cuando intento cargar la pag desde el explore hay veces que no me la carga y otras veces si y otras
me da error del ocilogon o del ociexecute. Si sabeis como resolverlo por favor contesten
Después de probar varias cosas para conectar el cliente de oracle con la librería php_oci8.dll de PHP, me decía que no podía cargar dicha librería(acceso denegado). Lo que sucedía era que a la carpeta de oracle (C:\oracle) tenía que darle al usuario "Everyone" el permiso de control total (lectura, escritura...), y verificar que dentro de este directorio, la carpeta \bin también tubiera el mismo permiso, por eos me denegaba el acceso, no podía abrir la librería oci.dll.
Saludos y espero le sirva a alguien.
Lorena
Oye, muchas gracias Lore.
Por si acaso, la Lore es una chica muy simpática y bastante avezada en todo lo relacionado en bases de datos en entornos empresariales. Aprovechen de explotarla :)
HOLA A TODOS:
COMO HAGO PARA TRABAJAR PHP Y ORACLE POR FAVOR QUIEN ME PUEDE DAR LOS PASOS O AYUDARME.
LO QUE QUIERO HACER ES UN MNATENIMIENTO EN PHP USANDO COMO BASE DE DATOS ORACLE PERO EL CODIGO YA LO TENGO PERO CON MYSQL Y POSTGRESQL AHORA ME GUSTARIA IMPLEMENTARLO CON ORACLE QUIEN ME`PUEDE AYUDAR EN ESO SOY NUEVO EN ORACLE. POR FAVOR AYUDENME EN PHP Y ORACLE QUE CONFIGURACIONES DEBO HACER ANTES DE CORRER LA MIS PAGINAS PHP. QUIEN ME AYUDE LE MANDO A SU EMAIL MIS ARCHIVOS DE PHP CON MYSQL/POSTGRESQL/ Y AHORA ORACLE GRACIAS POR FAVOR AMIGOS AYUDENME
Hola a todos quisiera saber si alguien instalo php con soporte para oracle en linux
Mi configuaracion es la siguiente:
RedHat Enterprice Advance Server 3.0 upgrade 1
Apache 2.046
Mi problema ocurre al intentar compilar php ya sea version 4 o 5 con soporte para oci8 me ocurre el siguiente error:
./configure --prefix=/usr/local --with-oci8=$ORACLE_HOME --disable-all
...
...
/home/oracle/php-4.4.1/ext/oci8/oci8.c:5559: petición del miembro `in_call' en algo que no es estructura ó unión
/home/oracle/php-4.4.1/ext/oci8/oci8.c:5567: petición del miembro `id' en algo que no es estructura ó unión
make: *** [ext/oci8/oci8.lo] Error 1
Me sucedio lo mismo al intentar instalar php5 que es la version que necesito, pero como me fue mal lo intente con php4 pero me genero el mismo error.
Espero alguien pueda ayudar.
gracias de antemano!
Víctor!!
Buenas.
Estoy intentando conectarme con Oracle desde php con oci y al momento de ejecutar la sentencia ociparse el Apache produce un error y se reinicia. Si a alguien le ha sucedido por favor responder. Gracias.
Hola,
Yo resolvi mi problema de conexion entre oracle y php en windows instalando WAMP la version 1.5.0 la puedes descargar en https://sourceforge.net/project/showfiles.php?group_id=116092
con esto te despreocupas del resto, en su consola de administracion tiene la opcion de php_oci8 la seleccionas y el la descomenta del php.ini.
Para que funcione debes tener instalado el cliente oracle en tu servidor y a la vez tener compartida la carpeta de oracle.
Reinicias el apache y listo.
saludos..
Víctor!!
Desarrolle unas paginas en PHP que hacen consultas a bases de datos Orcale, las desarrollo localmente usando funciones odbc. Ahora necesito colocar en produccion este desarrollo con las siguientes caracteristicas del servidor: LINUX /APACHE y funciona con paginas desarrolladas en JSP.
Por favor me pueden indicar que se debe hacer en el servidor para que mis paginas en PHP funcionen.
Yo estoy cambiando en mis paginas las funciones de oracle con odbc por las siguientes:
$db = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = db.192........)(PORT = db.1521)) ) (CONNECT_DATA = (SID = NNNN) ) )";
$conex = OCILogon("usuario","pass",$db);
O COMO SE HACE AQUI________
GRACIAS
Llevo semanas en esto..........
bueno aki les dejare la forma de trabajar con oracle desde php
pare este ejercicio debemos contar con los siguiente...
un servidor de BD (oracle) y otro servidor web montado en windows (phptriad lo pueden descargar y te intala el apache y php sin mucho rollo)
ya teniendo montado el servidor web con apahe y php...
procederemos a modificar el php.ini
en Windows Extensions
buscar extension=php_oci8.dll y descomentarlo (qitarle el ';' al pricipio) y salvamos los cambios
ok...
ahora lo mas importante debemos tener creado un TNS para conectarnos a oracle..
como se hace esto.
bueno junto con los cd de oracle biene uno ke nos permite crear clientes para oracle (es un cd ke te permie conectarte desde otro pc al servidor de oracle)
una vez instalado debes entrar a "Net Easy Config" y crear un servicio de red.
para este ejemplo le llamaremos "SERVIDOR"
el tipo de servicio es TCP/IP
el host es la direccion del servidor de BD (ej: 192.168.1.100) el numero de puerto no lo modifikes
en el SID le indicaremos el nombre del servicio el cual se definio al crar la bd. (ej:ORAC)
y finalmente hacer un aprueba de coneccion...
ahora
crearems nuetro primer php conectado a oracle:
<?php
$pub_user='scott';
$pub_pass='tiger';
//$pub_serv='(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))(CONNECT_DATA = (SID = ORAC)))';
$conn = ocinlogon($pub_user,$pub_pass,$pub_serv);
$sql = "select DEPTNO, DNAME ";
$sql .= "from dept ";
$stmt = ociparse($conn,$sql);
OCIDefineByName($stmt,"DEPTNO",$codigo);
OCIDefineByName($stmt,"DNAME",$nombre);
ociexecute($stmt);
while (ocifetch($stmt))
{
echo "$codigo - $nombre ";
}
ocifreestatement($stmt);
ocilogoff($conn);
?>
saludos...
Muchas gracias, estimado trauco. Espero que tus consejos le ayuden a alguno de nuestros oraclianos usuarios.
al momento de realizar una consulta sql en oracle en la cual consulten datos en mas de una tabla,
deben de tener en cuenta de que para que la consulta sea mas rapida la tabla de mayor tamamaño debe ir primero...
entre mas grande la tabla mas a la izquierda en el FROM
un ejemplo de esto seria
tengo 2 tablas
una de clientes y la otra de ciudades
en el sql debemos colocar por ejemplo
select clientes.nombre, ciudad.ciudad_glosa
from clientes, ciudades
where cliente.codigo_ciudad = ciudad.codigo_ciudad
pd.si necesitan ayuda en algunas consultas Sql en ORACLE no duden en consultar.
Claudio, buenos dias. Tengo un desarrollo en php5 y Oracle, y como es posible que el mismo se instale en otros lugares con SQL Server, estoy pensando en hacer una capa de abstraccion que me facilite esta tarea (ademas de migrar a objetos). Estoy buscando documentación y me topé con PDO pero lo veo complejo. Tienes alguna experiencia al respecto o conoces de algun sitio en español que me pueda guiar?.
Agradezco desde ya tu disposición.
Cordiales Saludos.
Sergio.
¿Para que reinventar la rueda? Te recomiendo que le eches una miradita a adodb, que es una excelente biblioteca de abstracción de base de datos. Puedes tranquilamente usar oracle y mssql; incluso, tiene soporte para pdo.
¿como puedo hacer un select count ha una tabla y el resultado en vez de imprimirlo por pantalla guardarlo en una variable, usando oracle.dll
Hola: yo solo quiero a portar un poco de experiencia (muy poca) espero que les sirva. Al querer habilitar la extencion php_oci8.dll en el PHP (evidentemente ya todo configurado) al reiniciar al apache mandaba un mensaje de error diciendo que "unload ..blbla php_oci8.dll, not found" o algo parecido bueno para resolver esto he realizado varios pasos pero antes debo decir que la extencion php_oci8.dll que viene con la version PHP 5.1.4 NO SIRVE asi que NO INTENTEN CON ESTA VERSION yo tengo instalado apache 2.0 con php 5.0.4 les recomiendo esta si no tienen inconvenientes, bueno les suguiero que intenten los siguientes pasos si
1. Darle permisos de EVERYONE o TODOS a las carpetas de donde esta instalado PHP y la carpeta EXT dentro de ella.
2. Copiar el archivo php_oci8.dll en System32 o System (segun sea el caso)
3. poner en la variable PATH de windows (panel control->system->advanced->Environment Variable) la ruta de la carpeta "ext" que esta en la carpeta "php" Ej. C:\SERVIDOR\PHP\EXT
4. REINICIAR LA MAQUINA PARA QUE TENGA EFECTO
espero que les ayude un poco esto y tengan en cuenta que la version 5.1.4 que viene en la distribucion de php no sirve el archivo saludos a todos.
ok disculpa pero yo tengo un grave error, uso php5.2 con oracle9i. para hacer una conexion con bd uso el ora_connect al parecer no se encuentran distintas librerias, como php_oci8.dll, php_pdo_oci8.dll entre otras, ya las baje y las instale nuevamente pero nada. sera que las librerias deben estar acorde con la version de php? por fa como donde puedo bajar librerias o que puedo hacer
Sí, las versiones de las librerías deben ser las mismas del php que las utiliza. Revisa en PECL el paquete de oci8: http://pecl.php.net/package/oci8
hola a todos soy javi y necesito que alguien me ayude, quiero saber si aparte de sql existe otra herramienta mas rapida para hacer busqueda de informacion en una base de datos de oracle.
mil gracias
Ehhhh.... se supone que las bases de datos relacionales están hechas para trabajar vía SQL. Los otros métodos, por decir lo menos, son un tanto primitivos.
Suerte con la búsqueda.
Hola,
estamos intentando compilar php5.2.4 para integrar las librerias oci8, pero siempre obtenemos el mismo error tras ejecutar "make". Los pasos que hemos realizado son los siguientes:
$ unzip instantclient-basic-linux32-10.2.0.1-20050713.zip
$ unzip instantclient-sdk-linux32-10.2.0.1-20050713.zip
# mkdir -p /opt/oracle/instantclient
# mv instantclient_10_2/* /opt/oracle/instantclient/.
# cd /opt/oracle/instantclient
# ln -s libclntsh.so.10.1 libclntsh.so
# ln -s libocci.so.10.1 libocci.so
# echo /opt/oracle/instantclient >> /etc/ld.so.conf
# ldconfig
# cd /etc/profile.d
# echo export LD_LIBRARY_PATH=/opt/oracle/instantclient>oracle.sh
# chmod +x oracle.sh
# tar zxvf php-5.2.4.tar.gz
# cd php-5.2.4
# ./configure --with-oci8=shared,instantclient,/opt/oracle/instantclient
# make
El error que se produce es el siguiente:
/opt/oracle/instantclient/libclntsh.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [ext/oci8/oci8.la] Error 1
¿Podríais ayudarnos, hemos mirado en internet y no encontramos más pasos que realizar?
Mucahs gracias
Yo tengo The AppServ Open Project - 2.5.9 for Windows
Que contiene:
Apache Web Server Version 2.2.4
PHP Script Language Version 5.2.3
Y una base de datos Oracle 9i a la que no he podido conectar con ninguna de sus sugerencias...
Segui los pasos de oracle oficial:
http://www.oracle.com/technology/tech/php/htdocs/inst_php_apache_windows.html
todo paso a paso.
Les agradezco cualquier sugerencia para probar conexiones via odbc y directamente tambien.
Gracias de antemanos..... sabigual@yahoo.com
No has probado con Oracle 10?
Ups, me pillaste. Esta está para un crack de oracle. De partida, ¿oracle funciona bien?
Buenas Tardes,
Estoy creando una aplicación con Base de Datos Oracle y PHP... El servidor donde cargo las paginas es un apache en Unix y .. no he podido conseguir solución para poder realizar las conexiones con la BD ya que no conozco cuales son las librerias equivalentes a php_oci8.dll o php_oracle.php en el servidor apache en UNIX. Por supuesto, al no saber cuales son menos se como debo manipularlas o habilitarlas.
Toda ayuda es bien recibida, porfavor amigos es urgente ya que ando atrasado en el desarrollo de la aplicación por esta cuestión.
Primero que nada excelente foro felicidades asu creador y asus usuarios, Tengo un problema con la ejecucion de un procedimiento almacenado desde mi script PHP, ya que ese mismo procedimiento lo ejecuto en mi oracle sqldeveloper y lo realiza correctamente. cabe señalar que mi procedimiento almacenado es muy grande y llama a su vez otras funciones, procedimientos y utliza cursores.
Es extraño por que funciona correctamente con la mayoria de las ejecuciones. solo con un envio hace este comportamiento.
a qui el codigo
$sp ="BEGIN SPGIGANTE($id, $idProblema,$mysession,$var1,$var2, $var3,$var4, :ID ); END;";
echo $sp
// $sp lo imprimo para despues pegarlo en el sqlDeveloper y lo ejecuta correctamente
// pero desde el php No, se queda en estado ciclico
$id_s = oci_parse($Conn,$sp);
if(!$id_s) {
throw new Exception("Error Parser");
}
if(!oci_bind_by_name($id_s,":ID",$id))
throw new Exception("Error en el enlace de variable :ID",2);
$res = oci_execute($id_s,OCI_DEFAULT);
if(!$res) {
throw new Exception("Error exec");
}
echo $id
Ayuda, gracias
Hola.
Por favor, necesito ayuda urgente. No conozco muy bien el manejo de php-oracle, pero necesito realzar una consulta a la bdd en la cual envio como parametro una variable tomada de otro formulario. he estado leyendo sobre el oci_bind_by_name pero no me funciona.
Por los pronto quisiera q me salga esta consulta al menos, en donde la variable que utilizo es un valor constante pero ni esto me funciona y no me da ningun error ni nada, simplemente sale mi pagina vacia.
***************************************************************************
include ("conectar.php");
$sql = "SELECT usu_codigo, usu_nombre, usu_tipo, ent_codigo FROM USUARIOS
WHERE ((usu_codigo like :u)) ";
$us="admin";
$result= oci_parse($c,$sql);
oci_bind_by_name($result, ":u",$us);
oci_execute($result);
// $nu=oci_num_rows($result);
while($r=oci_fetch_array($result)){
print $r[0].$r[1];}
***************************************************************************
Si alguien me pudiera ayudar, se lo agradeceria infinitamente.
yo estoy trabajano con PHP y oracle 10g expres, tengo problemas para utilizar los registros que me trae una consulta quisiera ver si alguien me puede ayudar, nesesito meter dichos registros en un arreglo bidimencional para poder comparar estos registros entre ellos mismos, tengo una funcion en php con oracle que funciona y hace lo que quiero pero esa funcion no la puedo pasar a oracle ya que con conosco las funciones equivalentes en oracle.
Esta es mi funcion oracle con mysql:
Cualquier ayuda manden me la a mi correo: m_maclarenf1@hotmail.com
function consultaDatos($sql){
// funcion que devuelve varios registros
$cnx = conectar();
if (trim($sql)!=""){
$sql = trim($sql);
if (substr(strtoupper($sql),0,7) == "SELECT "){
mysql_select_db("rapm") ;
// seleccionamos la base
$result = mysql_query ($sql) or die(mysql_error());
$numregs = mysql_num_rows($result);
$sql2 = "";
if ($numregs > 0 ) {
$campos = array ();
for ($i=0;$i<$numregs;$i++ ) {
$campos[$i] = mysql_fetch_row($result);
}
mysql_free_result($result);
//print($campos[0]."".$campos[1]."".$campos[2]."".$campos[3]."".$campos[4] );
//if ($numsr> 1) { echo "&iescl;Atencion: Se encontro mas de una coincidencia!";}
return $campos;
}
else{
echo "&iescl;Atencion: no se encontro ningun registro!";
return false;
}
mysql_close($cnx);
}
else {echo "La instruccion sql no es de consulta conocida ";}
}
ELSE{echo "¡La consulta sql esta vacia!";}
}
Que tal.
Estoy tratando de hacer una conexión de php-4.4.9 con oracle 9i en windows xp. Tengo instalado el cliente 10g pero al intentar hacer la conexión me manda el siguiente error.
Fatal error: Call to undefined function: oci_connect() in C:\Archivos de programa\Apache Group\Apache2\htdocs\CFE\main.php on line 5
y en el log de apache me aparece el siguiente error:
[Mon Dec 29 12:53:01 2008] [error] [client 127.0.0.1] PHP Warning: Unknown(): Unable to load dynamic library 'c:\\php\\extensions\\php_oci8.dll' - No se puede encontrar el m\xf3dulo especificado.\r
Espero me puedan auxiliar con este problema. Muchas gracias.
Enviar un comentario nuevo