Comment puis-je stocker et récupérer des images d'une base de données MySQL en utilisant PHP?

StackOverflow https://stackoverflow.com/questions/1636877

  •  06-07-2019
  •  | 
  •  

Question

Comment puis-je insérer une image dans MySQL puis la récupérer avec PHP?

J'ai une expérience limitée dans l'un et l'autre domaine et je pourrais utiliser un peu de code pour me permettre de commencer à comprendre ceci.

Était-ce utile?

La solution

Vous créez d’abord une table MySQL pour stocker les images, comme par exemple:

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

Vous pouvez ensuite écrire une image dans la base de données, telle que:

/***
 * 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(

Vous créez d’abord une table MySQL pour stocker les images, comme par exemple:

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

Vous pouvez ensuite écrire une image dans la base de données, telle que:

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

Vous pouvez afficher une image de la base de données dans une page Web avec:

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

Vous pouvez afficher une image de la base de données dans une page Web avec:

<*>

Autres conseils

Au lieu de stocker des images dans une base de données, stockez-les dans un dossier de votre disque et stockez leur emplacement dans votre base de données.

Attention, le fait de servir des images à partir d'une base de données est généralement beaucoup, beaucoup beaucoup moins rapide que de les servir à partir d'un disque.

Vous allez démarrer un processus PHP, ouvrir une connexion à une base de données, faire en sorte que la base de données lise les données d’image du même disque et de la même mémoire cache que le système de fichiers, puis les transférant sur quelques sockets et tampons, puis les déplaçant via PHP. par défaut, il est impossible de le mettre en cache et ajoute une surcharge de codage HTTP en bloc.

Les serveurs Web modernes OTOH peuvent servir des images avec seulement quelques appels de noyau optimisés (fichier mappé en mémoire et cette zone de mémoire transmise à la pile TCP), de sorte qu'ils ne copient même pas la mémoire et évitent les surcoûts.

C'est une différence entre pouvoir servir 20 ou 2000 images en parallèle sur une seule machine.

Ne le faites pas , sauf si vous avez absolument besoin d'une intégrité transactionnelle (et même cela peut être fait uniquement avec des métadonnées d'image dans des routines de nettoyage de bases de données et de systèmes de fichiers) et savoir comment améliorer la gestion du protocole HTTP par PHP. convenir aux images.

Je recommande également de penser à cela, puis de choisir de stocker les images dans votre système de fichiers plutôt que dans la base de données. voir ici: Stockage d'images dans DB - Oui ou Non?

À mon avis, au lieu de stocker des images directement dans la base de données, il est recommandé de stocker l’emplacement de l’image dans la base de données. Alors que nous comparons les deux options, le stockage d’images dans la base de données est sécurisé pour des raisons de sécurité. Les inconvénients sont

  1. Si la base de données est corrompue, aucun moyen de le récupérer.

  2. La récupération des fichiers image de la base de données est lente par rapport à une autre option.

D'autre part, l'enregistrement de l'emplacement du fichier image dans la base de données présente les avantages suivants.

  1. Il est facile à récupérer.

  2. Si plus d'une image est stockée, nous pouvons facilement récupérer les informations sur l'image.

Personnellement, je ne voudrais pas stocker l’image dans la base de données, mais la placer dans un dossier inaccessible de l’extérieur et utiliser la base de données pour garder une trace de son emplacement. maintient la taille de la base de données et vous pouvez simplement l'inclure en utilisant PHP. Sans PHP, il n’y aurait aucun moyen d’accéder à cette image, puis

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top