One place for hosting & domains

      Comment utiliser le type de données BLOB MySQL pour stocker des images avec PHP sur Ubuntu 18.04


      L’auteur a sélectionné Girls Who Code pour recevoir un don dans le cadre de l’initiative Écrire pour des donations. 

      Introduction

      Un Binary Large Object (BLOB) est un type de données MySQL qui peut stocker des données binaires telles que des images, du multimédia et des fichiers PDF.

      Lors de la création d’applications qui nécessitent une base de données étroitement couplée où les images doivent être synchronisées avec les données connexes (par exemple, un portail d’employés, une base de données d’étudiants ou une application financière), vous pouvez trouver pratique de stocker des images telles que les photos et signatures de passeport des étudiants dans une base de données MySQL avec d’autres informations connexes.

      C’est là qu’intervient le type de données MySQL BLOB. Cette approche de programmation élimine la nécessité de créer un système de fichiers séparé pour le stockage des images. Le système centralise également la base de données, la rendant plus portable et plus sécurisée car les données sont isolées du système de fichiers. La création de sauvegardes est également plus transparente puisque vous pouvez créer un seul fichier MySQL dump qui contient toutes vos données.

      La récupération des données est plus rapide, et lors de la création des enregistrements, vous pouvez être sûr que les règles de validation des données et l’intégrité référentielle sont maintenues, en particulier lors de l’utilisation des transactions MySQL.

      Dans ce tutoriel, vous allez utiliser le type de données MySQL BLOB pour stocker des images avec PHP sur Ubuntu 18.04.

      Conditions préalables

      Pour suivre ce guide, vous aurez besoin des éléments suivants :

      Étape 1 — Création d’une base de données

      Vous commencerez par créer un exemple de base de données de votre projet. Pour ce faire, connectez-vous en SSH à votre serveur, puis exécutez la commande suivante pour vous connecter à votre serveur MySQL en tant que root :

      Entrez le mot de passe root de votre base de données MySQL et appuyez sur ENTER pour continuer.

      Ensuite, exécutez la commande suivante pour créer une base de données. Dans ce tutoriel, nous l’appellerons test_company :

      • CREATE DATABASE test_company;

      Une fois la base de données créée, vous verrez le résultat suivant :

      Output

      Query OK, 1 row affected (0.01 sec)

      Ensuite, créez un compte test_user sur le serveur MySQL et n’oubliez pas de remplacer PASSWORD par un mot de passe fort :

      • CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';

      Vous verrez la sortie suivante :

      Output

      Query OK, 0 rows affected (0.01 sec)

      Pour accorder des privilèges complets à test_user sur la base de données test_company, exécutez :

      • GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';

      Vérifiez que vous obtenez le résultat suivant :

      Output

      Query OK, 0 rows affected (0.01 sec)

      Enfin, videz la table des privilèges afin que MySQL recharge les autorisations :

      Assurez-vous de voir le résultat suivant :

      Output

      Query OK, 0 rows affected (0.01 sec)

      Maintenant que la base de données test_company et test_user sont prêts, vous allez passer à la création du tableau products pour le stockage d’échantillons de produits.  Vous utiliserez cette table plus tard pour insérer et récupérer des enregistrements afin de faire la démonstration du fonctionnement de MySQL BLOB.

      Déconnectez-vous du serveur MySQL :

      Ensuite, reconnectez-vous avec les informations d’identification du test_user que vous avez créé :

      Entrez le mot de passe du test_user et appuyez sur ENTER (ENTRÉE) pour continuer. Ensuite, passez à la base de données test_company en tapant ce qui suit :

      Une fois la base de données test_company sélectionnée, MySQL affichera :

      Output

      Database changed

      Ensuite, créez un tableau products en exécutant :

      • CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

      Cette commande crée un tableau nommé products. Le tableau contient quatre colonnes :

      • product_id : Cette colonne utilise un type de données BIGINT afin d’accueillir une grande liste de produits jusqu’à un maximum de 2⁶³-1 articles. Vous avez marqué la colonne comme PRIMARY KEY pour identifier les produits de manière unique. Pour que MySQL puisse gérer la génération de nouveaux identifiants pour des colonnes insérées, vous avez utilisé le mot-clé AUTO_INCREMENT.

      • product_name : Cette colonne contient les noms des produits. Vous avez utilisé le type de données VARCHAR car ce champ gère généralement des caractères alphanumériques jusqu’à un maximum de 50 caractères — la limite de 50 n’est qu’une valeur hypothétique utilisée pour les besoins de ce tutoriel.

      • price : à des fins de démonstration, votre tableau products contient la colonne price pour stocker le prix de détail des produits. Comme certains produits peuvent avoir des valeurs flottantes (par exemple, 23.69, 45,36, 102.99), vous avez utilisé le type de données DOUBLE.

      • product_image : Cette colonne utilise un type de données BLOB pour stocker les données binaires réelles des images des produits.

      Vous avez utilisé le moteur de stockage InnoDB pour la table afin de prendre en charge un large éventail de fonctionnalités, y compris les transactions MySQL. Après avoir exécuté ceci pour créer le tableau products, vous verrez le résultat suivant :

      Output

      Query OK, 0 rows affected (0.03 sec)

      Déconnectez-vous de votre serveur MySQL :

      Vous obtiendrez le résultat suivant

      Output

      Bye

      Le tableau products est maintenant prêt à stocker quelques enregistrements, y compris des images des produits et vous le remplirez avec quelques produits lors de la prochaine étape.

      Étape 2 — Création d’un script PHP pour connecter et alimenter la base de données

      Au cours de cette étape, vous allez créer un script PHP qui se connectera à la base de données MySQL que vous avez créée à l’Etape 1. Le script préparera trois exemples de produits et les insérera dans le tableau products.

      Pour créer le code PHP, ouvrez un nouveau fichier avec l’éditeur de texte :

      • sudo nano /var/www/html/config.php

      Entrez ensuite dans le fichier et remplacez PASSWORD avec le mot de passe de test_user que vous avez créé à l’Étape 1 :

      /var/www/html/config.php

      <?php
      
      define('DB_NAME', 'test_company');
      define('DB_USER', 'test_user');
      define('DB_PASSWORD', 'PASSWORD');
      define('DB_HOST', 'localhost');
      
      $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      
      

      Enregistrez et fermez le fichier.

      Dans ce fichier, vous avez utilisé quatre constantes PHP pour vous connecter à la base de données MySQL que vous avez créée à l’Étape 1 :

      • DB_NAME : Cette constante contient le nom de la base de données test_company.

      • DB_USER : Cette variable contient le nom de l’utilisateur test_user.

      • DB_PASSWORD : Cette constante stocke le PASSWORD MySQL du compte test_user.

      • DB_HOST : Représente le serveur sur lequel réside la base de données. Dans ce cas, vous utilisez le serveur localhost.

      La ligne suivante de votre fichier initie un PHP Data Object (PDO) et se connecte à la base de données MySQL :

      ...
      $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
      ...
      

      Vers la fin du fichier, vous avez défini quelques attributs PDO :

      • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION : cet attribut indique au PDO de lancer une exception qui peut être enregistrée à des fins de débogage.
      • ATTR_EMULATE_PREPARES, false : Cette option augmente la sécurité en demandant au moteur de base de données MySQL de faire le préparation au lieu de PDO.

      Vous allez inclure le fichier /var/www/html/config.php dans deux scripts PHP que vous créerez ensuite pour insérer et récupérer des enregistrements, respectivement.

      Tout d’abord, créez le script /var/www/html/insert_products.php PHP pour l’insertion des enregistrements dans le tableau products :

      • sudo nano /var/www/html/insert_products.php

      Ajoutez ensuite les informations suivantes dans le fichier /var/www/html/insert_products.php :

      /var/www/html/insert_products.php

      <?php
      
      require_once 'config.php';
      
      $products = [];
      
      $products[] = [
                    'product_name' => 'VIRTUAL SERVERS',
                    'price' => 5,
                    'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png")
                    ];
      
      $products[] = [
                    'product_name' => 'MANAGED KUBERNETES',
                    'price' => 30,
                    'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png")
                    ];
      
      $products[] = [
                    'product_name' => 'MySQL DATABASES',
                    'price' => 15,
                    'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" )
                    ];
      
      $sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)";
      
      foreach ($products as $product) {
          $stmt = $pdo->prepare($sql);
          $stmt->execute($product);
      }
      
      echo "Records inserted successfully";
      

      Enregistrez et fermez le fichier.

      Dans le fichier, vous avez inclus le fichier config.php en haut. C’est le premier fichier que vous avez créé pour définir les variables de la base de données et vous connecter à la base de données. Le fichier initie également un objet PDO et le stocke dans une variable $pdo.

      Ensuite, vous avez créé un tableau des données des produits à insérer dans la base de données. Outre product_name et price, qui sont préparés respectivement sous forme de chaînes de caractères et de valeurs numériques, le script utilise la fonction intégrée file_get_contents de PHP pour lire les images d’une source externe et les transmettre sous forme de chaînes de caractères à la colonne product_image.

      Ensuite, vous avez préparé une instruction SQL et utilisé l’instruction foreach{...} de PHP pour insérer chaque produit dans la base de données.

      Pour exécuter le fichier /var/www/html/insert_products.php, exécutez-le dans la fenêtre de votre navigateur en utilisant l’URL suivante. N’oubliez pas de remplacer your-server-IP par l’adresse IP publique de votre serveur :

      http://your-server-IP/insert_products.php
      

      Après l’exécution du fichier, vous verrez un message de confirmation dans votre navigateur confirmant que les enregistrements ont été insérés dans la base de données.

      Un message de réussite montrant que les enregistrements ont été insérés dans la base de données

      Vous avez correctement inséré trois enregistrements contenant des images de produit dans la table products. Dans l’étape suivante, vous allez créer un script PHP pour récupérer ces enregistrements et les afficher dans votre navigateur.

      Étape 3 — Afficher les informations des produits à partir de la base de données MySQL

      Avec les informations et les images des produits dans la base de données, vous allez maintenant coder un autre script PHP qui interroge et affiche les informations des produits dans un tableau HTML sur votre navigateur.

      Pour créer le fichier, tapez ce qui suit :

      • sudo nano /var/www/html/display_products.php

      Entrez ensuite les informations suivantes dans le fichier :

      /var/www/html/display_products.php

      <html>
        <title>Using BLOB and MySQL</title>
        <body>
      
        <?php
      
        require_once 'config.php';
      
        $sql = "SELECT * FROM products";
        $stmt = $pdo->prepare($sql);
        $stmt->execute();
        ?>
      
        <table border="1" align = 'center'> <caption>Products Database</caption>
          <tr>
            <th>Product Id</th>
            <th>Product Name</th>
            <th>Price</th>
            <th>Product Image</th>
          </tr>
      
        <?php
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo '<tr>';
            echo '<td>' . $row['product_id'] . '</td>';
            echo '<td>' . $row['product_name'] . '</td>';
            echo '<td>' . $row['price'] . '</td>';
            echo '<td>' .
            '<img src = "data:image/png;base64,' . base64_encode($row['product_image']) . '" width = "50px" height = "50px"/>'
            . '</td>';
            echo '</tr>';
        }
        ?>
      
        </table>
        </body>
      </html>
      

      Sauvegardez les modifications du fichier et fermez-le.

      Ici, vous avez de nouveau inclus le fichier config.php afin de vous connecter à la base de données. Ensuite, vous avez préparé et exécuté une instruction SQL en utilisant PDO pour récupérer tous les éléments du tableau products à l’aide de la commande SELECT * FROM products.

      Ensuite, vous avez créé un tableau HTML et l’avez rempli avec les données des produits en utilisant l’instruction PHP while() {...}. La ligne $row = $stmt->fetch(PDO::FETCH_ASSOC) interroge la base de données et stocke le résultat dans la variable $row sous la forme d’un tableau multidimensionnel, que vous avez ensuite affiché dans une colonne du tableau HTML en utilisant la syntaxe $row['column_name'].

      Les images de la colonne product_image sont jointes dans les balises <img src = "">. Vous avez utilisé les attributs width et height pour redimensionner les images à une taille plus petite qui peut tenir dans la colonne du tableau HTML.

      Afin de convertir en images les données détenues par le type de données BLOB, vous avez utilisé la fonction PHP base64_encode intégrée et la syntaxe suivante pour le schéma Data URI :

      data:media_type;base64, base_64_encoded_data
      

      Dans ce cas, l’image/png est le media_type et la chaîne codée en Base64 de la colonne product_image est la base_64_encoded_data.

      Ensuite, exécutez le fichier display_products.php dans un navigateur web en tapant l’adresse suivante :

      http://your-server-IP/display_products.php
      

      Après avoir exécuté le fichier display_products.php dans votre navigateur, vous verrez un tableau HTML avec une liste de produits et d’images associées.

      Liste des produits de la base de données MySQL

      Cela confirme que le script PHP pour la récupération des images de MySQL fonctionne comme prévu.

      Conclusion

      Dans ce guide, vous avez utilisé le type de données MySQL BLOB pour stocker et afficher des images avec PHP sur Ubuntu 18.04. Vous avez également vu les avantages fondamentaux du stockage des images dans une base de données par rapport au stockage dans un système de fichiers. Il s’agit notamment de la portabilité, de la sécurité et de la facilité de sauvegarde. Si vous créez une application telle qu’un portail d’étudiants ou une base de données d’employés qui nécessite de stocker ensemble des informations et des images connexes, alors cette technologie peut vous être d’une grande utilité.

      Pour plus d’informations sur les types de données pris en charge dans MySQL, suivez le guide des Types de données MySQL. Si vous êtes intéressé par d’autres contenus relatifs à MySQL et PHP, consultez les tutoriels suivants :



      Source link

      How To Use the MySQL BLOB Data Type to Store Images with PHP on Ubuntu 18.04


      The author selected Girls Who Code to receive a donation as part of the Write for DOnations program.

      Introduction

      A Binary Large Object (BLOB) is a MySQL data type that can store binary data such as images, multimedia, and PDF files.

      When creating applications that require a tightly-coupled database where images should be in sync with related data (for example, an employee portal, a student database, or a financial application), you might find it convenient to store images such as students’ passport photos and signatures in a MySQL database alongside other related information.

      This is where the MySQL BLOB data type comes in. This programming approach eliminates the need for creating a separate file system for storing images. The scheme also centralizes the database, making it more portable and secure because the data is isolated from the file system. Creating backups is also more seamless since you can create a single MySQL dump file that contains all your data.

      Retrieving data is faster, and when creating records you can be sure that data validation rules and referential integrity are maintained especially when using MySQL transactions.

      In this tutorial, you will use the MySQL BLOB data type to store images with PHP on Ubuntu 18.04.

      Prerequisites

      To follow along with this guide, you will need the following:

      Step 1 — Creating a Database

      You’ll start off by creating a sample database for your project. To do this, SSH in to your server and then run the following command to log in to your MySQL server as root:

      Enter the root password of your MySQL database and hit ENTER to continue.

      Then, run the following command to create a database. In this tutorial we’ll name it test_company:

      • CREATE DATABASE test_company;

      Once the database is created, you will see the following output:

      Output

      Query OK, 1 row affected (0.01 sec)

      Next, create a test_user account on the MySQL server and remember to replace PASSWORD with a strong password:

      • CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';

      You’ll see the following output:

      Output

      Query OK, 0 rows affected (0.01 sec)

      To grant test_user full privileges on the test_company database, run:

      • GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';

      Make sure you get the following output:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Finally, flush the privileges table in order for MySQL to reload the permissions:

      Ensure you see the following output:

      Output

      Query OK, 0 rows affected (0.01 sec)

      Now that the test_company database and test_user are ready, you’ll move on to creating a products table for storing sample products. You’ll use this table later to insert and retrieve records to demonstrate how MySQL BLOB works.

      Log out from the MySQL server:

      Then, log back in again with the credentials of the test_user that you created:

      When prompted, enter the password for the test_user and hit ENTER to continue. Next, switch to the test_company database by typing the following:

      Once the test_company database is selected, MySQL will display:

      Output

      Database changed

      Next, create a products table by running:

      • CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

      This command creates a table named products. The table has four columns:

      • product_id: This column uses a BIGINT data type in order to accommodate a large list of products up to a maximum of 2⁶³-1 items. You’ve marked the column as PRIMARY KEY to uniquely identify products. In order for MySQL to handle the generation of new identifiers for inserted columns, you have used the keyword AUTO_INCREMENT.

      • product_name: This column holds the names of the products. You’ve used the VARCHAR data type since this field will generally handle alphanumerics up to a maximum of 50 characters—the limit of 50 is just a hypothetical value used for the purpose of this tutorial.

      • price: For demonstration purposes, your products table contains the price column to store the retail price of products. Since some products may have floating values (for example, 23.69, 45.36, 102.99), you’ve used the DOUBLE data type.

      • product_image: This column uses a BLOB data type to store the actual binary data of the products’ images.

      You’ve used the InnoDB storage ENGINE for the table to support a wide range of features including MySQL transactions. After executing this for creating the products table, you’ll see the following output:

      Output

      Query OK, 0 rows affected (0.03 sec)

      Log out from your MySQL server:

      You will get the following output

      Output

      Bye

      The products table is now ready to store some records including products’ images and you’ll populate it with some products in the next step.

      Step 2 — Creating PHP Scripts for Connecting and Populating the Database

      In this step, you’ll create a PHP script that will connect to the MySQL database that you created in Step 1. The script will prepare three sample products and insert them into the products table.

      To create the PHP code, open a new file with your text editor:

      • sudo nano /var/www/html/config.php

      Then, enter the following information into the file and replace PASSWORD with the test_user password that you created in Step 1:

      /var/www/html/config.php

      <?php
      
      define('DB_NAME', 'test_company');
      define('DB_USER', 'test_user');
      define('DB_PASSWORD', 'PASSWORD');
      define('DB_HOST', 'localhost');
      
      $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      
      

      Save and close the file.

      In this file, you’ve used four PHP constants to connect to the MySQL database that you created in Step 1:

      • DB_NAME : This constant holds the name of the test_company database.

      • DB_USER : This variable holds the test_user username.

      • DB_PASSWORD : This constant stores the MySQL PASSWORD of the test_user account.

      • DB_HOST: This represents the server where the database resides. In this case, you are using the localhost server.

      The following line in your file initiates a PHP Data Object (PDO) and connects to the MySQL database:

      ...
      $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
      ...
      

      Toward the end of the file, you’ve set a couple of PDO attributes:

      • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: This attribute instructs PDO to throw an exception that can be logged for debugging purposes.
      • ATTR_EMULATE_PREPARES, false: This option increases security by telling the MySQL database engine to do the prepare instead of PDO.

      You’ll include the /var/www/html/config.php file in two PHP scripts that you will create next for inserting and retrieving records respectively.

      First, create the /var/www/html/insert_products.php PHP script for inserting records to the products table:

      • sudo nano /var/www/html/insert_products.php

      Then, add the following information into the /var/www/html/insert_products.php file:

      /var/www/html/insert_products.php

      <?php
      
      require_once 'config.php';
      
      $products = [];
      
      $products[] = [
                    'product_name' => 'VIRTUAL SERVERS',
                    'price' => 5,
                    'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png")
                    ];
      
      $products[] = [
                    'product_name' => 'MANAGED KUBERNETES',
                    'price' => 30,
                    'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png")
                    ];
      
      $products[] = [
                    'product_name' => 'MySQL DATABASES',
                    'price' => 15,
                    'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" )
                    ];
      
      $sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)";
      
      foreach ($products as $product) {
          $stmt = $pdo->prepare($sql);
          $stmt->execute($product);
      }
      
      echo "Records inserted successfully";
      

      Save and close the file.

      In the file, you’ve included the config.php file at the top. This is the first file you created for defining the database variables and connecting to the database. The file also initiates a PDO object and stores it in a $pdo variable.

      Next, you’ve created an array of the products’ data to be inserted into the database. Apart from the product_name and price, which are prepared as strings and numeric values respectively, the script uses PHP’s in-built file_get_contents function to read images from an external source and pass them as strings to the product_image column.

      Next, you have prepared an SQL statement and used the PHP foreach{...} statement to insert each product into the database.

      To execute the /var/www/html/insert_products.php file, run it in your browser window using the following URL. Remember to replace your-server-IP with the public IP address of your server:

      http://your-server-IP/insert_products.php
      

      After executing the file, you’ll see a success message in your browser confirming records were inserted into the database.

      A success message showing that records were inserted to database

      You have successfully inserted three records containing product images into the products table. In the next step, you’ll create a PHP script for retrieving these records and displaying them in your browser.

      Step 3 — Displaying Products’ Information From the MySQL Database

      With the products’ information and images in the database, you’re now going to code another PHP script that queries and displays the products’ information in an HTML table on your browser.

      To create the file, type the following:

      • sudo nano /var/www/html/display_products.php

      Then, enter the following information into the file:

      /var/www/html/display_products.php

      <html>
        <title>Using BLOB and MySQL</title>
        <body>
      
        <?php
      
        require_once 'config.php';
      
        $sql = "SELECT * FROM products";
        $stmt = $pdo->prepare($sql);
        $stmt->execute();
        ?>
      
        <table border = '1' align = 'center'> <caption>Products Database</caption>
          <tr>
            <th>Product Id</th>
            <th>Product Name</th>
            <th>Price</th>
            <th>Product Image</th>
          </tr>
      
        <?php
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo '<tr>';
            echo '<td>' . $row['product_id'] . '</td>';
            echo '<td>' . $row['product_name'] . '</td>';
            echo '<td>' . $row['price'] . '</td>';
            echo '<td>' .
            '<img src = "data:image/png;base64,' . base64_encode($row['product_image']) . '" width = "50px" height = "50px"/>'
            . '</td>';
            echo '</tr>';
        }
        ?>
      
        </table>
        </body>
      </html>
      

      Save the changes to the file and close it.

      Here you’ve again included the config.php file in order to connect to the database. Then, you have prepared and executed an SQL statement using PDO to retrieve all items from the products table using the SELECT * FROM products command.

      Next, you have created an HTML table and populated it with the products’ data using the PHP while() {...} statement. The line $row = $stmt->fetch(PDO::FETCH_ASSOC) queries the database and stores the result in the $row variable as a multi-dimensional array, which you have then displayed in an HTML table column using the $row['column_name'] syntax.

      The images from the product_image column are enclosed inside the <img src = ""> tags. You’ve used the width and height attributes to resize the images to a smaller size that can fit in the HTML table column.

      In order to convert the data held by the BLOB data type back to images, you’ve used the in-built PHP base64_encode function and the following syntax for the Data URI scheme:

      data:media_type;base64, base_64_encoded_data
      

      In this case, the image/png is the media_type and the Base64 encoded string from the product_image column is the base_64_encoded_data.

      Next, execute the display_products.php file in a web browser by typing the following address:

      http://your-server-IP/display_products.php
      

      After running the display_products.php file in your browser, you will see an HTML table with a list of products and associated images.

      List of products from MySQL database

      This confirms that the PHP script for retrieving images from MySQL is working as expected.

      Conclusion

      In this guide, you used the MySQL BLOB data type to store and display images with PHP on Ubuntu 18.04. You’ve also seen the basic advantages of storing images in a database as opposed to storing them in a file system. These include portability, security, and ease of backup. If you are building an application such as a students’ portal or employees’ database that requires information and related images to be stored together, then this technology can be of great use to you.

      For more information about the supported data types in MySQL follow the MySQL Data Types guide. If you’re interested in further content relating to MySQL and PHP, check out the following tutorials:



      Source link