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: