Bases de Datos > Oracle

 Subir Imagenes a Oracle con PHP

(1/1)

jualeop:
Buenos Dias,

acudo a ustedes para tratar de resolver un problema. resulta que estoy tratando de subir imagenes a una BD en ORACLE por PHP pero no he podido, cuando ejecuto el SQL me muestra un error "ociparse(): OCIParse: ORA-00972: identificador demasiado largo", les adjunto el código, es de anotar que en la BD tengo el campo ARCHIVO_BINARIO declarado como BLOB:


--- Código: PHP --- // archivo temporal (ruta y nombre).$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ; // leer del archvio temporal .. el binario subido.$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal))); // Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.$binario_nombre=$_FILES['archivo']['name'];$binario_peso=$_FILES['archivo']['size'];$binario_tipo=$_FILES['archivo']['type']; //insertamos los datos en la BD.            $db_conn = ocilogon( "SCRIPT", "SCRIPT", "ORAPR1");             $cmdstr = "insert into SCRIPT.ARCHIVOS (ARCHIVO_BINARIO, ARCHIVO_NOMBRE, ARCHIVO_PESO, ARCHIVO_TIPO) VALUES ('$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";            $parsed = ociparse($db_conn, $cmdstr);            ociexecute($parsed);header("location: listar_imagenes.php");  // si ha ido todo bienexit;  

Agradezco su ayuda al respecto.

jualeop:
Les cuento que ya pude hacer la tarea, les adjunto los archivos completos para hacer la conexión y consultar las imágenes:

***************************************lobosolitario.php**********************************

--- Código: PHP --- <html><head><title>Formulario de subida de fotos</title></head><body>Formulario de subida de fotos a Oracle<br><br>Limite de tamaño de subida de fotos 1.024 KB<br> <form action="lobosolitario1.php" method="post" enctype="multipart/form-data">Descripción de la imagen: <input type="text" name="lob_description"><br>Abrir Archivo: <input type="file" name="lob_upload"><br><br><input type="submit" value="Subir Imagen"> - <input type="reset"></form><br><a href=show.php>ver imagenes</a></body></html>  
*************************************lobosolitario1.php*************************************


--- Código: PHP --- <?php$lim_tam = "1024000";$lob_description = $_POST['lob_description'];$lob_upload_name = $_FILES['lob_upload']['name'];$lob_upload_size = $_FILES['lob_upload']['size'];$lob_upload_type = $_FILES['lob_upload']['type'];$lob_upload = $_FILES['lob_upload']['tmp_name']; if($_FILES['lob_upload']['error']==1){print "    <script>    alert('El Archivo supera el límite de tamaño, por favor seleccione un archivo diferente.')    document.location.href='lobosolitario.php'    </script>    ";}else if($lob_upload_size>$lim_tam){print "    <script>    alert('El Archivo supera el límite de tamaño, por favor seleccione un archivo diferente.')    document.location.href='lobosolitario.php'    </script>    ";} else if($_FILES['lob_upload']['error']!=0){print "    <script>    alert('Error de Archivo, el archivo no se puede subir.')    document.location.href='lobosolitario.php'    </script>    ";}else {$user = "SCRIPT";$pass = "SCRIPT";$tsnames = "ORAPR1";//Aqui se establece la conexion con una base de datos oracle.$conn = OCILogon($user,$pass,$tsnames); /*Inicializa un nuevo descriptor vacío LOB/FILE (LOB por defecto)Reserva espai per mantenir descriptors o localitzadors LOB. Els valors valids pel tipus type sonOCI_D_FILE, OCI_D_LOB, OCI_D_ROWID. Per descriptors LOB, els metodes LOAD, SAVE, i SAVEFILE estan associatsamb el descriptor, per BFILE només existeix el mètode LOAD*/$lob = OCINewDescriptor($conn, OCI_D_LOB); //Preparem la consulta SQL(INSERT) capaç d'introduir els valors a la base de dades.$stmt = OCIParse($conn,"INSERT INTO BINARY_DATA (id,description,bin_data,filename,filesize,filetype) VALUES (LOBO.NEXTVAL,'$lob_description',EMPTY_BLOB(),'$lob_upload_name','$lob_upload_size','$lob_upload_type') returning BIN_DATA into :the_blob"); /* Enlaza una variable PHP a un Placeholder de OracleEnllaça la variable PHP variable a un placeholder d'ORACLE ph_name. Si aquesta serà usada per entrada oo sortida es determinarà en temps d'execució, i serà reservat l'espai necessari d'emmagatzemament. Elparametre lenght estableix el tamany màxim de l'enllaç. Si s'estableix length a -1 OCIBindByName utilitzaràel tamany de la variable per establir el tamany màxim.EN LA ULTIMA PRUEBA QUE SE REALIZÓ EL 07/01/2011 ESTE VALOR $LOB VENÍA PASADO POR REFERENCIA &$LOB NO OBSTANTE ESTO ES UN ERROR EN ESTE CASO*/OCIBindByName($stmt, ':the_blob',$lob, -1, OCI_B_BLOB); //Ejecucion de la sentencia.OCIExecute($stmt, OCI_DEFAULT);if($lob->savefile($lob_upload)){OCICommit($conn);echo "Blob successfully uploadedn<br>";echo "<a href=show.php>SHOW FILES</a>";}else{echo "Couldn't upload Blobn";}OCIFreeStatement($stmt);OCILogoff($conn);}?>  
****************************************show.php*******************************************


--- Código: PHP --- <?$user = "SCRIPT";$pass = "SCRIPT";$tsnames = "ORAPR1";//Fem el Login amb la base de dades$Conn = OciLogon($user,$pass,$tsnames); $sql_1 = "select id, filename, description, filetype from binary_data order by id desc";$sql_1 = OCIParse($Conn, $sql_1);OCIExecute($sql_1, OCI_DEFAULT);While (OCIFetchInto($sql_1, $row, OCI_ASSOC)){echo "<a href=file.php?id=$row[ID] target=_blank>$row[FILENAME]</a>  $row[FILETYPE]  $row[DESCRIPTION]<br>";}echo "<br><a href=lobosolitario.php>Insertar una nueva imagen";OCIFreeStatement($sql_1);OCILogoff($Conn);?>  
**************************************file.php************************************************


--- Código: PHP --- <?/*file.phpArchivo que nos muestra el archivo pedido a la base de datos*/$id=$_GET['id'];$user = "SCRIPT";$pass = "SCRIPT";$tsnames = "ORAPR1"; $Conn = OciLogon($user, $pass, $tsnames); $query = "select BIN_DATA, FILENAME, FILESIZE, FILETYPE from binary_data where ID=$id";$stmt = OCIParse($Conn, $query); $NewData = array();OCIDefineByName($stmt,"BIN_DATA",$NewData["BIN_DATA"]);OCIDefineByName($stmt,"FILETYPE",$NewData["FILETYPE"]); OCIExecute($stmt);OCIFetch($stmt); If (is_object($NewData["BIN_DATA"])){$NewData["BIN_DATA"] = $NewData["BIN_DATA"]->load();}Header ("Content-type: $NewData[FILETYPE]");echo $NewData["BIN_DATA"];OCIFreeStatement($stmt);?>  
*********************************************************************************************

Obviamente se puede mejorar más pero esto es una base para saber cómo se suben y después se utilizan de acuerdo a como los necesites.

Navegación

[0] Índice de Mensajes

Ir a la versión completa