utilizando una subir ruta mostrar modificar insertar imágenes imagenes imagen guardar guardadas datos con como borrar bases almacenamiento php mysql database blob

subir - ¿Cómo puedo almacenar y recuperar imágenes de una base de datos MySQL usando PHP?



subir imagenes php guardar ruta mysql (6)

¿Cómo puedo insertar una imagen en MySQL y luego recuperarla usando PHP?

Tengo experiencia limitada en cualquier área, y podría usar un pequeño código para ayudarme a entenderlo.


En lugar de almacenar imágenes en la base de datos, guárdelas en una carpeta en su disco y almacene su ubicación en su base de datos.


Mi opinión es que, en lugar de almacenar imágenes directamente en la base de datos, se recomienda almacenar la ubicación de la imagen en la base de datos. Al comparar ambas opciones, Almacenar imágenes en la base de datos es seguro por razones de seguridad. Desventaja son

  1. Si la base de datos está dañada, no hay forma de recuperarla.

  2. Recuperar archivos de imagen de db es lento cuando se compara con otra opción.

Por otro lado, el almacenamiento de la ubicación del archivo de imagen en db tendrá las siguientes ventajas.

  1. Es fácil de recuperar

  2. Si se almacenan más de una imagen, podemos recuperar fácilmente la información de la imagen.


Personalmente, no almacenaría la imagen en la base de datos, sino que la colocaría en una carpeta no accesible desde el exterior y usaría la base de datos para hacer un seguimiento de su ubicación. mantiene el tamaño de la base de datos baja y solo puede incluirlo mediante PHP. No habría forma sin PHP para acceder a esa imagen, entonces


Primero creas una tabla MySQL para almacenar imágenes, como por ejemplo:

create table testblob ( image_id tinyint(3) not null default ''0'', image_type varchar(25) not null default '''', image blob not null, image_size varchar(25) not null default '''', image_ctgy varchar(25) not null default '''', image_name varchar(50) not null default '''' );

Luego puede escribir una imagen en la base de datos como:

/*** * All of the below MySQL_ commands can be easily * translated to MySQLi_ with the additions as commented ***/ $imgData = file_get_contents($filename); $size = getimagesize($filename); mysql_connect("localhost", "$username", "$password"); mysql_select_db ("$dbname"); // mysqli // $link = mysqli_connect("localhost", $username, $password,$dbname); $sql = sprintf("INSERT INTO testblob (image_type, image, image_size, image_name) VALUES (''%s'', ''%s'', ''%d'', ''%s'')", /*** * For all mysqli_ functions below, the syntax is: * mysqli_whartever($link, $functionContents); ***/ mysql_real_escape_string($size[''mime'']), mysql_real_escape_string($imgData), $size[3], mysql_real_escape_string($_FILES[''userfile''][''name'']) ); mysql_query($sql);

Puede visualizar una imagen de la base de datos en una página web con:

$link = mysql_connect("localhost", "username", "password"); mysql_select_db("testblob"); $sql = "SELECT image FROM testblob WHERE image_id=0"; $result = mysql_query("$sql"); header("Content-type: image/jpeg"); echo mysql_result($result, 0); mysql_close($link);



Tenga en cuenta que el servicio de imágenes de DB suele ser mucho, mucho más lento que servirlos desde el disco.

Comenzará un proceso de PHP, abrirá una conexión de base de datos, tendrá los datos de imagen DB leídos del mismo disco y RAM para la memoria caché como lo haría el sistema de archivos, lo transferirá a unos pocos sockets y búferes y luego lo expulsará a través de PHP, lo que de forma predeterminada es no cacheable y agrega sobrecarga de codificación HTTP fragmentada.

Los servidores web modernos OTOH pueden servir imágenes con solo unas pocas llamadas optimizadas al kernel (archivo mapeado en memoria y ese área de memoria pasada a la pila TCP), de modo que ni siquiera copian la memoria y casi no hay gastos generales.

Esa es una diferencia entre poder servir 20 o 2000 imágenes en paralelo en una máquina.

Así que no lo hagas a menos que necesites integridad transaccional (y de hecho incluso eso se puede hacer con solo metadatos de imágenes en DB y rutinas de limpieza del sistema de archivos) y saber cómo mejorar el manejo de PHP de HTTP para que sea adecuado para las imágenes.