jueves, 4 de septiembre de 2014

Ingresar una imagen en una base de datos - PHP


En este articulo vamos a realizar la inserción de una imagen en mysql a través de PHP, como también a recuperar la misma de la base de datos y mostrarla como una vista previa luego de la inserción.


Para realizar ésto, se debe crear una tabla la cual debe contener campos como: nombre del archivo, tipo de extensión de la imagen y la imagen como tal. Para almacenar este archivo primero la tabla deberá tener un campo que acepte este tipo de información, para ello existe un tipo de dato denominado BLOB, el cual permite almacenar una cantidad variable de datos como cadenas de caracteres binarios (Bytes).

Existen 4 tipos de datos BLOB (Binary Large Object) los cuales almacenan cadenas de caracteres binarios:

TINYBLOB: Objeto binario grande de longitud máxima de 255 (2^8 - 1) caracteres.

BLOB:  Objeto binario grande de longitud máxima de 65535 (2^16 - 1) caracteres.

MEDIUMBLOB:  Objeto binario grande de longitud máxima de 16777215 (2^24 - 1) caracteres.

LONGBLOB: Objeto binario grande de longitud máxima de 4294967295 (2^32 - 1) caracteres.

De los cuales se usa normalmente el tipo de dato BLOB, y los otros de acuerdo a las especificaciones individuales.


Para este ejercicio se usa el tipo BLOB:
Nombre base de datos: imagenes.
Nombre Tabla: imagen.

Estructura de la tabla:
Tabla imagen















La tabla imagen contiene tres campos necesarios para el manejo de la imagen:
 
nombre: Campo que almacena el nombre o descripción de la imagen.
imagen:  Campo que almacena la imagen en cadenas de caracteres binarios.
tipo: Campo que almacena la extensión o tipo de imagen. ejemplo (png, jpg, gif).

Primero se crea la página con un formulario desde donde se cargará la imagen:
index.php

Para enviar una imagen desde un formulario se agrega el atributo enctype="multipart/form-data" el cual especifica como se deberían codificar los datos cuando se envíen al servidor (Linea 11).

El atributo enctype solo puede ser usado si  method="POST".

multipart/form-data solo es requerido cuando se tiene un control de carga de archivos.

text/plain los espacios se reemplazan con el símbolo "+", pero los caracteres especiales no son codificados.

Se crea el archivo que contiene todo el código para gestionar la inserción de la imagen en la base de datos, llamado cargarImagen.php:

cargarImagen.php

 Se crea el archivo que selecciona la imagen de la base de datos y la despliega:

mostrarImagen.php

Por ultimo se incluye el archivo cargarImagen.php en la página principal index.php (Linea 16):

index.php

Subiendo una imagen en la base de datos:

seleccionando imagen

Imagen cargada:

Revisando la base de datos:


NOTA: el anterior ejemplo es educativo y solo pretende demostrar la utilidad que tiene el uso de los tipos de datos binarios, ya que es una mala practica usar este tipo de almacenamiento por términos de largo plazo reflejado en el rendimiento de la base de datos. Lo mejor para este tipo de casos es reservar una carpeta para el almacenamiento de las imágenes y solo guardar en la base de datos el path que lleva a la imagen directamente.

1 comentario:

  1. NJ casino to reopen on Monday - KTNV
    NJ casino to reopen on Monday. 상주 출장마사지 Casino at 안성 출장샵 Mohegan Sun, 1 김제 출장샵 Mohegan Sun Blvd., Uncasville. Check if the casino is reopening 울산광역 출장마사지 or just 대전광역 출장안마 a

    ResponderBorrar

¿Tienes alguna pregunta?