cum se utilizează tipul de date MySQL BLOB pentru a stoca imagini cu PHP pe Ubuntu 18.04

autorul a selectat fetele care codifică pentru a primi o donație ca parte a programului Write for DOnations.

Introducere

un obiect binar mare (BLOB) este un tip de date MySQL care poate stoca date binare, cum ar fi imagini, multimedia și fișiere PDF.

când creați aplicații care necesită o bază de date strâns cuplată în care imaginile ar trebui să fie sincronizate cu datele conexe (de exemplu, un portal pentru angajați, o bază de date pentru studenți sau o aplicație financiară), s-ar putea să vă fie convenabil să stocați imagini, cum ar fi fotografiile și semnăturile pașaportului studenților într-o bază de date MySQL, alături de alte informații conexe.

aici intervine Tipul de date MySQL BLOB. Această abordare de programare elimină necesitatea creării unui sistem de fișiere separat pentru stocarea imaginilor. Schema centralizează, de asemenea, baza de date, făcând-o mai portabilă și mai sigură, deoarece datele sunt izolate de sistemul de fișiere. Crearea copiilor de rezervă este, de asemenea, mai perfectă, deoarece puteți crea un singur fișier mysql dump care conține toate datele dvs.

preluarea datelor este mai rapidă, iar la crearea înregistrărilor puteți fi sigur că regulile de validare a datelor și integritatea referențială sunt menținute în special atunci când se utilizează tranzacții MySQL.

în acest tutorial, veți utiliza tipul de date MySQL BLOB pentru a stoca imagini cu PHP pe Ubuntu 18.04.

cerințe preliminare

pentru a urma împreună cu acest ghid, veți avea nevoie de următoarele:

  • un server Ubuntu 18.04 configurat folosind configurarea inițială a serverului cu Ubuntu 18.04 și un utilizator non-root cu privilegii sudo.
  • Apache, MySQL și PHP configurați urmând ghidul despre cum să instalați stiva Linux, Apache, MySQL, PHP (LAMP) pe Ubuntu 18.04. Pentru acest tutorial, nu este necesar să creați gazde virtuale, astfel încât să puteți sări peste pasul 4.

Step 1 — Crearea unei baze de date

veți începe prin crearea unei baze de date eșantion pentru proiectul dumneavoastră. Pentru a face acest lucru, SSH în serverul dvs. și apoi executați următoarea comandă pentru a vă conecta la serverul MySQL ca root:

  • sudo mysql -u root -p

introduceți parola de root a bazei de date MySQL și apăsați ENTER pentru a continua.

apoi, executați următoarea comandă pentru a crea o bază de date. În acest tutorial îl vom numi test_company:

  • CREATE DATABASE test_company;

odată ce baza de date este creată, veți vedea următoarea ieșire:

Output
Query OK, 1 row affected (0.01 sec)

apoi, creați un cont test_user pe serverul MySQL și nu uitați să înlocuiți PASSWORD cu o parolă puternică:

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

veți vedea următoarea ieșire:

Output
Query OK, 0 rows affected (0.01 sec)

pentru a acorda test_user privilegii complete în baza de date test_company, executați:

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

asigurați-vă că obțineți următoarea ieșire:

Output
Query OK, 0 rows affected (0.01 sec)

în cele din urmă, spălați tabelul de privilegii pentru ca MySQL să reîncarce permisiunile:

  • FLUSH PRIVILEGES;

asigurați-vă că vedeți următoarea ieșire:

Output
Query OK, 0 rows affected (0.01 sec)

acum că baza de date test_company și test_user sunt gata, veți trece la crearea unui tabel products pentru stocarea produselor eșantion. Veți utiliza acest tabel mai târziu pentru a insera și a prelua înregistrări pentru a demonstra cum funcționează MySQL BLOB.

Deconectați-vă de la serverul MySQL:

  • QUIT;

apoi, conectați-vă din nou cu acreditările test_user pe care le-ați creat:

  • mysql -u test_user -p

când vi se solicită, introduceți parola pentru test_user și apăsați ENTER pentru a continua. Apoi, comutați la baza de date test_company tastând următoarele:

  • USE test_company;

odată ce baza de date test_company este selectată, MySQL va afișa:

Output
Database changed

apoi, creați un tabel products rulând:

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

această comandă creează un tabel numit products. Tabelul are patru coloane:

  • product_id: Această coloană utilizează un tip de date BIGINT pentru a găzdui o listă mare de produse până la maximum 2 articole din 3-1. Ați marcat coloana ca PRIMARY KEY pentru a identifica în mod unic produsele. Pentru ca MySQL să gestioneze generarea de noi identificatori pentru coloanele inserate, ați utilizat cuvântul cheie AUTO_INCREMENT.

  • product_name: această coloană conține numele produselor. Ați folosit tipul de date VARCHAR deoarece acest câmp va gestiona în general alfanumerice până la maximum 50 caractere—limita 50 este doar o valoare ipotetică utilizată în scopul acestui tutorial.

  • price: în scopuri demonstrative, tabelul products conține coloana price pentru a stoca prețul de vânzare cu amănuntul al produselor. Deoarece unele produse pot avea valori plutitoare (de exemplu, 23.69, 45.36, 102.99), ați utilizat tipul de date DOUBLE.

  • product_image: această coloană utilizează un tip de date BLOB pentru a stoca datele binare reale ale imaginilor produselor.

ați folosit spațiul de stocare InnoDB ENGINE pentru tabel pentru a suporta o gamă largă de caracteristici, inclusiv tranzacțiile MySQL. După executarea acestui lucru pentru crearea tabelului products, veți vedea următoarea ieșire:

Output
Query OK, 0 rows affected (0.03 sec)

Deconectați-vă de la serverul MySQL:

  • QUIT;

veți obține următoarea ieșire

Output
Bye

tabelul products este acum gata să stocheze unele înregistrări, inclusiv imaginile produselor și îl veți popula cu unele produse în pasul următor.

Step 2 — crearea scripturilor PHP pentru conectarea și popularea bazei de date

în acest pas, veți crea un script PHP care se va conecta la baza de date MySQL pe care ați creat-o la Pasul 1. Scriptul va pregăti trei produse de probă și le va introduce în tabelul products.

pentru a crea codul PHP, deschideți un fișier nou cu editorul de text:

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

apoi, introduceți următoarele informații în fișier și înlocuiți PASSWORD cu parola test_user pe care ați creat-o la Pasul 1:

/var/www/html/config.php
<?phpdefine('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);

Salvați și închideți fișierul.

în acest fișier, ați folosit patru constante PHP pentru a vă conecta la baza de date MySQL pe care ați creat-o în Pas 1:

  • DB_NAME : această constantă deține numele bazei de date test_company.

  • DB_USER : această variabilă deține numele de utilizator test_user.

  • DB_PASSWORD : această constantă stochează MySQL PASSWORD din contul test_user.

  • DB_HOST: acesta reprezintă serverul în care se află baza de date. În acest caz, utilizați serverul localhost.

următoarea linie din fișierul dvs. inițiază un obiect de date PHP (dop) și se conectează la baza de date MySQL:

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

spre sfârșitul fișierului, ați setat câteva atribute dop:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: Acest atribut instruiește dop să arunce o excepție care poate fi înregistrată în scopuri de depanare.
  • ATTR_EMULATE_PREPARES, false: această opțiune crește securitatea spunând motorului bazei de date MySQL să pregătească în loc de dop.

veți include fișierul /var/www/html/config.php în două scripturi PHP pe care le veți crea în continuare pentru inserarea și, respectiv, recuperarea înregistrărilor.

mai întâi, creați scriptul PHP /var/www/html/insert_products.php pentru inserarea înregistrărilor în tabelul produse:

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

apoi, adăugați următoarele informații în fișierul /var/www/html/insert_products.php:

/var/www/html/insert_products.php
<?phprequire_once 'config.php';$products = ;$products = ;$products = ;$products = ;$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";

Salvați și închideți fișierul.

în fișier, ați inclus fișierul config.php în partea de sus. Acesta este primul fișier creat pentru definirea variabilelor bazei de date și conectarea la baza de date. Fișierul inițiază, de asemenea, un obiect dop și îl stochează într-o variabilă $pdo.

apoi, ați creat o serie de date ale produselor pentru a fi inserate în baza de date. În afară de product_name și price, care sunt pregătite ca șiruri și respectiv valori numerice, scriptul folosește funcția file_get_contents încorporată PHP pentru a citi imagini dintr-o sursă externă și a le transmite ca șiruri la coloana product_image.

apoi, ați pregătit o instrucțiune SQL și ați folosit instrucțiunea PHP foreach{...} pentru a insera fiecare produs în baza de date.

pentru a executa fișierul /var/www/html/insert_products.php, rulați-l în fereastra browserului utilizând următoarea adresă URL. Nu uitați să înlocuiți your-server-IP cu adresa IP publică a serverului dvs:

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

după executarea fișierului, veți vedea un mesaj de succes în browser care confirmă că înregistrările au fost inserate în baza de date.

un mesaj de succes care arată că înregistrările au fost inserate în baza de date

ați introdus cu succes trei înregistrări care conțin imagini de produs în tabelul products. În pasul următor, veți crea un script PHP pentru preluarea acestor înregistrări și afișarea lor în browser.

Pasul 3 — afișarea informațiilor produselor din Baza de date MySQL

cu informațiile și imaginile produselor din Baza de date, acum veți codifica un alt script PHP care interoghează și afișează informațiile produselor într-un tabel HTML din browserul dvs.

pentru a crea fișierul, tastați următoarele:

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

apoi, introduceți următoarele informații în fișier:

/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 . '</td>'; echo '<td>' . $row . '</td>'; echo '<td>' . $row . '</td>'; echo '<td>' . '<img src = "data:image/png;base64,' . base64_encode($row) . '" width = "50px" height = "50px"/>' . '</td>'; echo '</tr>'; } ?> </table> </body></html>

Salvați modificările în fișier și închideți-l.

aici ați inclus din nou fișierul config.php pentru a vă conecta la baza de date. Apoi, ați pregătit și executat o instrucțiune SQL folosind Dop pentru a prelua toate elementele din tabelul products folosind comanda SELECT * FROM products.

apoi, ați creat un tabel HTML și l-ați populat cu datele produselor utilizând instrucțiunea PHP while() {...}. Linia $row = $stmt->fetch(PDO::FETCH_ASSOC) interoghează baza de date și stochează rezultatul în variabila $row ca o matrice multidimensională, pe care ați afișat-o apoi într-o coloană de tabel HTML utilizând sintaxa $row.

imaginile din coloana product_image sunt închise în interiorul etichetelor <img src = "">. Ați utilizat atributele width și height pentru a redimensiona imaginile la o dimensiune mai mică care se poate încadra în coloana tabel HTML.

pentru a converti datele deținute de tipul de date BLOB înapoi la imagini, ați utilizat funcția PHP base64_encode încorporată și următoarea sintaxă pentru schema URI de date:

data:media_type;base64, base_64_encoded_data

în acest caz, image/png este media_type și șirul codificat Base64 din coloana product_imageeste base_64_encoded_data.

apoi, executați fișierul display_products.php într-un browser web tastând următoarea adresă:

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

după rularea fișierului display_products.php în browserul dvs., veți vedea un tabel HTML cu o listă de produse și imagini asociate.

lista produselor din Baza de date MySQL

aceasta confirmă faptul că scriptul PHP pentru Preluarea imaginilor din MySQL funcționează conform așteptărilor.

concluzie

în acest ghid, ați utilizat Tipul de date MySQL BLOB pentru a stoca și afișa imagini cu PHP pe Ubuntu 18.04. De asemenea, ați văzut avantajele de bază ale stocării imaginilor într-o bază de date, spre deosebire de stocarea lor într-un sistem de fișiere. Acestea includ portabilitatea, securitatea și ușurința de backup. Dacă construiți o aplicație, cum ar fi un portal al studenților sau o bază de date a angajaților, care necesită stocarea împreună a informațiilor și a imaginilor conexe, atunci această tehnologie vă poate fi de mare folos.

pentru mai multe informații despre tipurile de date acceptate în MySQL urmați ghidul tipurilor de date MySQL. Dacă sunteți interesat de conținut suplimentar legat de MySQL și PHP, consultați următoarele tutoriale:

  • cum să implementați paginarea în MySQL cu PHP pe Ubuntu 18.04
  • cum să utilizați extensia PHP Dop pentru a efectua tranzacții MySQL în PHP pe Ubuntu 18.04

Leave a Reply

Lasă un răspuns

Adresa ta de email nu va fi publicată.