Oracle - Subir Imagenes a ORACLE por PHP

   
Vista:

Subir Imagenes a ORACLE por PHP

Publicado por Juan Alejandro Opayome (2 intervenciones) el 07/01/2011 15:20:17
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:

// 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 bien
exit;

Agradezco su ayuda al respecto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Subir Imagenes a ORACLE por PHP

Publicado por Juan Alejandro (2 intervenciones) el 11/01/2011 16:11:18
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**********************************

<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*************************************

<?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 son
OCI_D_FILE, OCI_D_LOB, OCI_D_ROWID. Per descriptors LOB, els metodes LOAD, SAVE, i SAVEFILE estan associats
amb 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 Oracle
Enllaça la variable PHP variable a un placeholder d'ORACLE ph_name. Si aquesta serà usada per entrada o
o sortida es determinarà en temps d'execució, i serà reservat l'espai necessari d'emmagatzemament. El
parametre 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 uploaded\n<br>";
echo "<a href=show.php>SHOW FILES</a>";
}
else
{
echo "Couldn't upload Blob\n";
}
OCIFreeStatement($stmt);
OCILogoff($conn);
}
?>

****************************************show.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************************************************

<?
/*
file.php
Archivo 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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar