Pregunta

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

Tengo una experiencia limitada en cualquier área, y podría usar un pequeño código para comenzar a resolver esto.

¿Fue útil?

Solución

Primero crea 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(

Primero crea 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:

$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);

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

<*>FILES['userfile']['name']) ); mysql_query($sql);

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

<*>

Otros consejos

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

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

Comenzará un proceso PHP, abriendo una conexión DB, haciendo que el DB lea datos de imagen del mismo disco y RAM para caché que el sistema de archivos, transfiriéndolo a través de unos pocos sockets y buffers y luego empujándolo a través de PHP, que de forma predeterminada, no se puede almacenar en caché y agrega una sobrecarga de codificación HTTP fragmentada.

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

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

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

También recomiendo pensar esto y luego elegir almacenar imágenes en su sistema de archivos en lugar de la base de datos. ver aquí: Almacenamiento de imágenes en DB - ¿Sí o no?

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, el almacenamiento de imágenes en la base de datos es seguro por razones de seguridad. Las desventajas son

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

  2. La recuperación de archivos de imagen de db es lenta cuando se compara con otra opción.

Por otro lado, almacenar 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 pondría en una carpeta a la que no se puede acceder desde el exterior, y usaría la base de datos para realizar un seguimiento de su ubicación. mantiene el tamaño de la base de datos bajo y solo puede incluirlo usando PHP. No habría forma sin PHP para acceder a esa imagen entonces

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top