Lenguaje PHPMYSQL La base de datos

Cargar y Almacenar imagen en MySQL PHP [Actualizado]

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.

[pt_view id=»fc09d98ps2″]

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.

Actualizado la carga de imagen a MySQL con PHP.- Ahora todo en un solo archivo compatible con PHP 8.

Cargar imagen a mysql actualizado
Cargar imagen a mysql actualizado

Descargar código fuente:

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!.

48 comentarios

        1. Logro cargar la imagen, pero no me la visualiza
          El unico archivo que necesita es el Index.php actualizado ?
          el archivo ver.php y el vista.php ya no son necesarios o eso creo entender ?
          Un saludo desde Sevilla.

          1. La última actualización todo esta en el index.php

            En cambio en vista.php se tiene que colocar de manera manual el ID del registro en la tabla de base de datos.

            Saludos

  1. Hola, gracias por compartir tus conocimientos. Me ha ayudado mucho tu código. Ahora tengo una duda que no he podido resolver de ninguna manera. Cómo hago para que la imagen que suba se agregue en un registro ya creado en la base de datos? Me explico mejor, tengo una bd con los datos de mis empleados ya insertados, ahora lo que necesito es ir agregándole fotos a cada uno de los registros para tener la ficha completa. Me pudieras decir cómo hacer esto? Gracias de antemano.

  2. Saludos, el archivo se cargo en base de datos, mas cuando la llamo, a la imagen, solo se ve una pantalla negra con centro recuadro blanco, no carga ninguna imagen, estoy extrayendo los datos con pdo, no se si falta algun interprete a parte del header para que pueda mostrar la imagen, puede ayudarme por favor? saludos

  3. Tengo duda. Copie las lineas de conexion y las puse en un archivo llamado, conexion.php, pero al momento de anexar no carga la imagen, pero si la guarda

  4. Un saludo Nestor. Excelente tu blog sobre ‘Cargar y Almacenar imagen en MySQL PHP’. Pero o se porqué la imagen recuperada no se muestra en la pantalla de mi computadora. Si puedes ayudarme con alguna explicación, te agradeceria..

  5. Hola. Muchas gracias por tu ejemplo. Te comento, que la imagen la carga bien, pero cuando le dio a vista o ver.php, no me la muestra.

    Saludos

  6. Excelente . La verdad que no suelo dejar comentarios en los artículos . Pero este está :
    1 bien resumido
    2 bien explicado
    3 muy buena metodología de explicación.

    Lo felicito . Seguiré de cerca sus publicaciones.
    Y si tiene cuenta en Youtube . Hágalo saber para seguir su canal.

    Felicitaciones , Gracias y esperamos más artículos.

    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

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

    1. es porque el id dice 4 en el formulario y si te fijas en la base de datos en el campo id aparece 3 o por lo menos en mi caso el id era tres entonces lo cambié en el formulario y ya mostró la imagen, pero hay que buscar la forma de hacerlo automático con una variable.

      1. Saludos gracias por el aporte, te comento que estoy usando tu codigo al cual le agregue un preview y personalice el input y esta trabajando como si fuera un dropzone.

  8. 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

  9. 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.

  10. 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é.

  11. 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