Imagen en base de datos

Vamos a ver como podemos guardar una imagen en un campo LONGBLOB de nuestra base de datos MySQL y luego mostrarla al visitante de nuestra página sin que la imagen se encuentre ya en nuestro servidor, si quereis podeis leer tambien una version mejorada de este artículo escrita por eial.

Lo primero que haremos es crear en nuestra base de datos una tabla con dos campos, el primero, el campo en el que almacenaremos el nombre del archivo, el segundo, donde pondremos la imagen:

000
001
002
003
CREATE TABLE `imagenes` (
`nombre` VARCHAR(100) ,
`imagen` LONGBLOB NOT NULL
);

Una vez configurada la tabla, haremos el formulario para subir la imagen:

.dma475 { width: 440px;}/*1*/

subir.php
000
001
002
003
004
<form method="post" action="guardar.php" enctype="multipart/form-data">
Nombre: <input type="text" name="nombre" maxlength="100"><br>
Imagen: <input type="file" name="imagen" size="40"><br>
<p><input type="submit" name="submit" value="Subir">
</form>

Después haremos la página que nos guardará la imagen en la base de datos.

Esta página recibirá la imagen y la leerá usando fread() y filesize para definir el tamaño a leer y luego guardará la imagen con el nombre seleccionado en la base de datos.

guardar.php
000
001
002
003
004
005
006
007
<?
// Configurar las dos lineas siguientes
mysql_connect("servidor","usuario","contraseña");
mysql_select_db("base_de_datos");
$imagen = addslashes(fread(fopen($imagen, "r"), filesize($imagen)));
$nombre = $_POST["nombre"];
mysql_query( "INSERT INTO imagenes (nombre,imagen) VALUES ('$nombre','$imagen')" );
?>Se ha subido la imagen a la base de datos, puedes verla pulsando <a href="ver.php?nombre=<? echo $nombre ?>">aquí
</a>

Una vez subida y configurada la página guardar.php, solo nos faltará hacer la página para mostrar la imagen.

Esta página leerá la imagen de la base de datos a partir del nombre pasado por url, luego enviará un header de content-type = image/jpeg, que tambien nos sirve para gif, y finalmente enviará el contenido de la imagen.

ver.php
000
001
002
003
004
005
006
007
008
009
010
<?
$nombre
= $_GET['nombre'];
// Configurar las dos lineas siguientes
@mysql_connect("servidor","usuario","contraseña");
@
mysql_select_db("base_de_datos");
$query = "SELECT imagen FROM imagenes WHERE nombre = '$nombre'" ;
$result = @mysql_query($query);
$imagen = @mysql_result($result,0);
Header( "Content-type: image/jpeg");
echo
$imagen;
?>

Configuraremos este último código y ya podremos provar nuestro ejemplo accediendo a subir.php

Tienes que tener en cuenta que no podrás subir dos imagenes y ponerles el mismo nombre, para mostrar una imagen en tu web lo haras desde ver.php?nombre=nombre_de_la_imagen:

000
<img src="ver.php?nombre=nombre_de_la_imagen">

Puedes descargar un zip con los archivos usados en este artículo, también puedes ejecutar un ejemplo para ver cómo funciona este código.

Deja un comentario