MYSQL La base de datosPHP Ejemplos

Cargar y Almacenar imagen en MySQL PHP

Cargar y Almacenar imagen en MySQL PHP. Cuando hablamos de subir imágenes al servidor se nos viene a la cabeza cargar la imagen en un directorio especificado y el nombre de la imagen almacenarlo en la base de datos.

¿Se puede subir una imagen sin almacenar en el servidor?

La respuesta es sí se puede hacer usando la base de datos MySQL. En algunos casos nuestro servidor está lleno y ya no podemos almacenar más imágenes, pero puede insertar un archivo de imagen en la base de datos sin subirlo en la carpeta. Este procedimiento nos ayuda a no llenar el servidor porque el contenido del archivo de imagen se almacena directamente en la base de datos en lugar del disco del servidor.

Cargar y Almacenar imagen en MySQL PHP

En este artículo, daremos solución a esta gran incógnita, de cómo almacenar el fichero de imagen en la base de datos MySQL y posteriormente poder recuperar la imagen de la base de datos.
No es tan complicado almacenar y recuperar imágenes de la base de datos utilizando PHP y MySQL. Aquí un ejemplo sencillo.

<img src='vista.php?id=4' alt='Img blob desde MySQL' width="600" />      

Sin embargo, podemos utilizar las ventajas de este potente gestor MySQL.

  • Requisitos para la configuración de las columnas para que podamos ambientarlo a almacenar imágenes.
  • Primeramente declarar el tipo de campo datos BLOB (objeto binario grande), ya que puede contener una gran cantidad de datos binarios.

Hay 4 tipos de BLOB disponibles: TINYBLOB, Blob, MEDIUMBLOB y LONGBLOB.Usaremos el tipo de datos LONGBLOB en la base de datos MySQL.
Nuestra tabla images_tabla.sql

CREATE TABLE IF NOT EXISTS `images_tabla` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imagenes` longblob NOT NULL,
  `creado` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;

Quizá le interese los siguientes artículos.

Formulario de subida de imagen

Mostrando el formulario a utilizar y permitirá a los usuarios elegir el archivo de imagen que desea cargar al servidor de base de datos MySQL.
Index.php

      <form name="MiForm" id="MiForm" method="post" action="cargar.php" enctype="multipart/form-data">
        <h4 class="text-center">Seleccione imagen a cargar</h4>
        <div class="form-group">
          <label class="col-sm-2 control-label">Archivos</label>
          <div class="col-sm-8">
            <input type="file" class="form-control" id="image" name="image" multiple>
          </div>
          <button name="submit" class="btn btn-primary">Cargar Imagen</button>
        </div>
      </form>
Cargar y almacenar imagen en MySQL
Cargar y almacenar imagen en MySQL

Almacenar imagen en la base de datos (cargar. php)

El archivo de carga.php contiene las siguientes funcionalidades.

Fichero cargar.php

<?php
if(isset($_POST["submit"])){
    $revisar = getimagesize($_FILES["image"]["tmp_name"]);
    if($revisar !== false){
        $image = $_FILES['image']['tmp_name'];
        $imgContenido = addslashes(file_get_contents($image));
        
        //Credenciales Mysql
        $Host = 'localhost';
        $Username = 'root';
        $Password = 'root';
        $dbName = 'images_db';
        
        //Crear conexion con la abse de datos
        $db = new mysqli($Host, $Username, $Password, $dbName);
        
        // Cerciorar la conexion
        if($db->connect_error){
            die("Connection failed: " . $db->connect_error);
        }
        
        
        //Insertar imagen en la base de datos
        $insertar = $db->query("INSERT into images_tabla (imagenes, creado) VALUES ('$imgContenido', now())");
        // COndicional para verificar la subida del fichero
        if($insertar){
            echo "Archivo Subido Correctamente.";
        }else{
            echo "Ha fallado la subida, reintente nuevamente.";
        } 
        // Sie el usuario no selecciona ninguna imagen
    }else{
        echo "Por favor seleccione imagen a subir.";
    }
}
?>

Aquí, mostramos en el navegador la imagen almacenada en nuestra base de datos.

Fichero ver.php

<body bgcolor="#bed7c0">
<div class="main">
<h1>Mostrando imagen almacenada en MySQL</h1>
  <div class="panel panel-primary">
    <div class="panel-body">
<img src='vista.php?id=4' alt='Img blob desde MySQL' width="600" />      
      </div> 
    </div>
 </div>
</body>

Archivo Vista.php

Este archivo  tiene la función de  extraer imagen de la BD mediante el método GET. Sin embargo, si la imagen tiene errores mostrara un mensaje “Imagen no existe“.

<?php
if(!empty($_GET['id'])){
    //Credenciales de conexion
    $Host = 'localhost';
    $Username = 'root';
    $Password = 'root';
    $dbName = 'images_db';
    
    //Crear conexion mysql
    $db = new mysqli($Host, $Username, $Password, $dbName);
    
    //revisar conexion
    if($db->connect_error){
       die("Connection failed: " . $db->connect_error);
    }
    
    //Extraer imagen de la BD mediante GET
    $result = $db->query("SELECT imagenes FROM images_tabla WHERE id = {$_GET['id']}");
    
    if($result->num_rows > 0){
        $imgDatos = $result->fetch_assoc();
        
        //Mostrar Imagen
        header("Content-type: image/jpg"); 
        echo $imgDatos['imagenes']; 
    }else{
        echo 'Imagen no existe...';
    }
}
?>
Mostrando imagen almacenada en MySQL
Mostrando imagen almacenada en MySQL
Cargar y Almacenar imagen en MySQL PHP
Cargar y Almacenar imagen en MySQL PHP

Esperando que este pequeño articulo les ayude en abundancia y les dejo los ficheros para que descarguen.

Descargar código fuente:

 

Descarga 156 Sistemas PHP & MySQL

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Publicaciones relacionadas

25 comentarios

    1. Hola Brayan

      Pueden ser varios factores que no te permiten subir mas de 1 mb

      Las directivas del PHP suelen estar configuradas como maximo a 2 MB o quiza menos dependiendo del servidor.

      1) Si estas en localhost puedes ingresar a php.ini y ampliar a mas de 2 mb
      2) Por otro lado, si estas en un servidor web contacta con ellos para que amplien esa restricción.

      Recuerda que la tabla que usamos en el ejemplo, especificamente la columna esta declarada con LONGBLOB y puede soportar hasta 4GB

      MEDIUMBLOB for 16777215 bytes (16 MB)
      LONGBLOB for 4294967295 bytes (4 GB).
      

      Saludos cordiales

  1. Excelente, muchas gracias por el material, llevo un día perdido buscando algo como lo que compartes. Lo que si no pude visualizar fue, el archivo ver.php y vista.php. Espero despues tambien compartas algo sobre como guardarlas dentro de una carpeta del servidor. SALUDOS.

  2. hola amigo excelente explicacion me sirvico excelente
    solo tenia una duda digamos que yo quisiera jalar todas las imagenes que subo a la base de datos sin necesidad de estar cambiando el id en el codigo si no que se mostraran automaticamente como logro eso

  3. Hola ya tengo las imagenes en la tabla, no entiendo vista.php?id=4 de donde sacas que el id es 4?

    Necesito mostrar las imágenes en un una debajo de otras si hay varias,

    Bueno quedo al aguardo, igual muy útil tu post

    1. Hola Daniel,

      El id 4 es el identificador del registro en la tabla de la base de datos, aqui solo hemos colcoado un ejemplo el id 4, pudiendo ser valores extraidos de la tabla.

      Saludos, espero que el ejemplo te ayude en tus protectos.

  4. La imagen si muestra pero hay q modificar el codigo en el ID de la imagen respectiva.
    como hacer para que muestre todas las imagenes y q el ususario seleccione cual desea ampliar?

      1. Gracias por el codigo, no es nada comi un arranque para activar las neuronas gracias a eso logre usarli como base para el mio , tengo un detalle Para actualizar la imagen por si se deseá cambiar como lo puedo hacer?, ya que lo estoy haciendo desde php pero no logró que lo actualicé.

  5. ok, ya pude ver la imagen, la cuestion es que el codigo no realizaa una busqueda en la BD, si no que le ponemos manualmente el ID, con el que que guarda la imagen, gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba