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>
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...'; } } ?>
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.
Descargar código fuente:
No encuentro para descargar la ultima revision de Agosto de 2019, solo consigo descargarme la de Noviembre de 2017
Saludos Manuel
Hemos actualizado el script para que funcione con PHP 8
Eso quiere decir que si no tengo php 8 no me lo puedo descargar?
Saludos desde Sevilla
Saludos Manuel
Normal funciona con versiones inferiores a PHP 8
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.
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
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.
en tu formulario recupera la información del empleado, agregando el campo de la foto, y haces un UPGRADE.
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
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
Saludos leo,
es posible que no haya cambiado algún valor erróneo del archivo de conexion.php.
Muchas gracias Sr Tapia, de casariego su articulo me ayudo mucho en mis propositos. Saludos desde Wisconsin
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..
y como seria subir una imagen desde consola(sin los php)??????
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
Gracias por el codigo.
Gracias estimado.
DE NADA estimado
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.
intente agregar un grupo de imágenes y me salen cortadas cuando las muestro, por que cree que pase eso ?..
No me deja guardar imágenes de mas de 1MB
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
Saludos cordiales
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.
una pregunta es necesario crear una tabla para las imagenes o solo con un campo esta bien
subí tres imágenes en el mismo registro en Mysql
como puedo verlas las cuatro cuando las consulto
Saludos
tu código esta super
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.
Andrea, pudiste buscar la manera automática con variable?
MUY BUENO EL CODIGO PARA SUBIR IMAGENES
Hola Pedro
Me alegra que el script te sirva.
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.
Como hago para que cargue mas de una imagen?
Hola,
Puedes usar el ciclo FOR o el ciclo Foreach.
Aqui un ejemplo de uso
https://www.baulphp.com/procesar-multiple-checkbox-seleccionados/
Como harian para cargar todas las imagenes porfa ayudenme
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
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
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.
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?
Lo pudiste hacer, es lo que necesito para un proyecto.
Alguien consiguió el archivo vista.php?
Saludos JASCISC,
Ya se habilito y se muestra el archivo vista.php. Además, puedes descargar todo el ejemplo completo.
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é.
La rutaaa esta en base de dato, pero la imagen no se ve en el archivo ver.php.
no se si faltara algún archivo vista.php
Falto la vista 🙁
falta vista.php :C
Muchas gracias! Me ha sido de gran ayuda tu código.
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
logra guardar la imagen, pero no la muestra
Muchísimas gracias me sirvió de mucho tu código