Slik Bruker Du MySQL BLOB Datatypen Til Å Lagre Bilder Med PHP På Ubuntu 18.04

forfatteren valgte Jenter Som Kode for å motta en donasjon som en del Av Write For DOnations-programmet.

Innledning

Et Binært Stort Objekt (BLOB) Er En MySQL-datatype som kan lagre binære data som bilder, multimedia og PDF-filer.

når du oppretter programmer som krever en tett koblet database der bilder skal synkroniseres med relaterte data (for eksempel en ansattportal, en studentdatabase eller en økonomisk applikasjon), kan det være praktisk å lagre bilder som studenters passbilder og signaturer i En MySQL-database sammen med annen relatert informasjon.

Dette er Hvor MySQL BLOB datatypen kommer inn. Denne programmeringsmetoden eliminerer behovet for å lage et eget filsystem for lagring av bilder. Ordningen sentraliserer også databasen, noe som gjør den mer bærbar og sikker fordi dataene er isolert fra filsystemet. Å lage sikkerhetskopier er også mer sømløs siden du kan lage en Enkelt MySQL dumpfil som inneholder alle dataene dine.

Henting av data er raskere, og når du oppretter poster, kan du være sikker på at datavalideringsregler og referanseintegritet opprettholdes, spesielt når Du bruker MySQL-transaksjoner.

i denne opplæringen vil Du bruke MySQL BLOB datatypen til å lagre bilder MED PHP På Ubuntu 18.04.

Forutsetninger

for å følge denne veiledningen trenger du følgende:

  • En Ubuntu 18.04-server konfigurert ved Hjelp Av Det Første Serveroppsettet Med Ubuntu 18.04 og en ikke-rotbruker med sudo privilegier.
  • Apache, MySQL og PHP satt opp ved å følge veiledningen Om Hvordan Du Installerer Linux, Apache, MySQL, PHP (LAMP) stack På Ubuntu 18.04. For denne opplæringen er det ikke nødvendig å opprette virtuelle verter, så du kan hoppe Over Trinn 4.

Trinn 1 — Opprette En Database

du starter med å opprette en eksempeldatabase for prosjektet. FOR å gjøre DETTE, SSH på serveren din og kjør deretter følgende kommando for å logge på MySQL-serveren som rot:

  • sudo mysql -u root -p

Skriv inn rotpassordet Til MySQL-databasen og trykk ENTER for å fortsette.

kjør deretter følgende kommando for å opprette en database. I denne opplæringen vil vi nevne det test_company:

  • CREATE DATABASE test_company;

når databasen er opprettet, vil du se følgende utdata:

Output
Query OK, 1 row affected (0.01 sec)

deretter oppretter du en test_user – konto på MySQL-serveren og husk å erstatte PASSWORD med et sterkt passord:

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

du vil se følgende utdata:

Output
Query OK, 0 rows affected (0.01 sec)

hvis du vil gi test_user fullstendige rettigheter på test_company – databasen, kjører du:

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

Pass på at du får følgende utdata:

Output
Query OK, 0 rows affected (0.01 sec)

til slutt, skyll privilegietabellen for At MySQL skal laste inn tillatelsene:

  • FLUSH PRIVILEGES;

Kontroller at du ser følgende utdata:

Output
Query OK, 0 rows affected (0.01 sec)

Nå som test_company – databasen og test_user er klare, går du videre til å lage et products – bord for lagring av prøveprodukter. Du bruker denne tabellen senere til å sette inn og hente poster for å demonstrere Hvordan MySQL BLOB fungerer.

Logg Ut Fra MySQL-serveren:

  • QUIT;

logg deretter på igjen med legitimasjonen til test_user du opprettet:

  • mysql -u test_user -p

når du blir bedt om det, skriv inn passordet for test_user og trykk ENTER for å fortsette. Deretter bytter du til test_company – databasen ved å skrive inn følgende:

  • USE test_company;

Når test_company databasen er valgt, Vil MySQL vise:

Output
Database changed

deretter oppretter du en tabell products ved å kjøre:

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

denne kommandoen oppretter en tabell med navnet products. Tabellen har fire kolonner:

  • product_id: Denne kolonnen bruker en datatype BIGINT for å imøtekomme en stor liste over produkter opptil maksimalt 23-1 elementer. Du har merket kolonnen som PRIMARY KEY for å identifisere produkter unikt. For At MySQL skal kunne håndtere genereringen av nye identifikatorer for innsatte kolonner, har du brukt søkeordet AUTO_INCREMENT.

  • product_name: denne kolonnen inneholder navnene på produktene. Du har brukt datatypen VARCHAR siden dette feltet vanligvis håndterer alfanumerikk opp til maksimalt 50 tegn-grensen på 50 er bare en hypotetisk verdi som brukes til formålet med denne opplæringen.

  • price: for demonstrasjonsformål inneholder tabellen products kolonnen price for å lagre utsalgsprisen på produkter. Siden enkelte produkter kan ha flytende verdier(for eksempel 23,69, 45,36, 102,99), har du brukt datatypen DOUBLE.

  • product_image: denne kolonnen bruker en datatype BLOB til å lagre de faktiske binære dataene for produktenes bilder.

du har brukt InnoDB lagring ENGINE for tabellen for å støtte et bredt spekter av funksjoner, inkludert MySQL-transaksjoner. Etter å ha utført dette for å lage products – tabellen, ser du følgende utdata:

Output
Query OK, 0 rows affected (0.03 sec)

Logg ut Fra MySQL-serveren din:

  • QUIT;

du får følgende utgang

Output
Bye

products tabellen er nå klar til å lagre noen poster, inkludert produktbilder, og du vil fylle den med noen produkter i neste trinn.

Trinn 2-Opprette PHP-Skript For Å Koble til Og Fylle Databasen

i dette trinnet oppretter DU ET PHP-skript som vil koble Til MySQL-databasen du opprettet I Trinn 1. Skriptet vil forberede tre prøveprodukter og sette dem inn i tabellen products.

Åpne EN ny fil med tekstredigeringsprogrammet for Å opprette PHP-koden:

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

deretter skriver du inn følgende informasjon i filen og erstatter PASSWORD med test_user passordet du opprettet I Trinn 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);

Lagre og lukk filen.

i denne filen har du brukt fire PHP-konstanter til å koble Til MySQL-databasen du opprettet I Trinn 1:

  • DB_NAME : denne konstanten inneholder navnet på databasen test_company.

  • DB_USER : denne variabelen inneholder brukernavnet test_user.

  • DB_PASSWORD : denne konstanten lagrer MySQL PASSWORD av test_user – kontoen.

  • DB_HOST: dette representerer serveren der databasen ligger. I dette tilfellet bruker du localhost – serveren .

følgende linje i filen starter ET PHP Data Object (PUD) og kobles Til MySQL-databasen:

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

Mot slutten av filen har du satt et par PUD-attributter:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: Dette attributtet instruerer PDO å kaste et unntak som kan logges for feilsøkingsformål.
  • ATTR_EMULATE_PREPARES, false: dette alternativet øker sikkerheten ved å fortelle MySQL-databasemotoren å gjøre prepare i stedet for PUD.

du vil inkludere /var/www/html/config.php – filen i TO PHP-skript som du vil opprette neste for å sette inn og hente poster henholdsvis.

opprett FØRST PHP-skriptet /var/www/html/insert_products.php for å sette inn poster i produkttabellen:

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

deretter legger du til følgende informasjon i filen /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";

Lagre og lukk filen.

i filen har du tatt med config.php – filen øverst. Dette er den første filen du opprettet for å definere databasevariablene og koble til databasen. Filen starter også ET PUD-objekt og lagrer det i en $pdo variabel.

deretter har du opprettet en matrise av produktdataene som skal settes inn i databasen. Bortsett fra product_name og price, som er utarbeidet som henholdsvis strenger og numeriske verdier, bruker skriptet PHPS innebygde file_get_contents – funksjon for å lese bilder fra en ekstern kilde og sende dem som strenger til kolonnen product_image.

deretter har du utarbeidet EN SQL-setning og brukt PHP foreach{...} – setningen for å sette inn hvert produkt i databasen.

for å utføre filen /var/www/html/insert_products.php, kjør den i nettleservinduet ved hjelp av FØLGENDE URL. Husk å erstatte your-server-IP med den offentlige IP-adressen til serveren din:

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

etter å ha kjørt filen, vil du se en suksessmelding i nettleseren din som bekrefter at poster ble satt inn i databasen.

 en suksessmelding som viser at poster ble satt inn i databasen

du har satt inn tre poster som inneholder produktbilder i tabellen products. I neste trinn oppretter DU ET PHP-skript for å hente disse postene og vise dem i nettleseren din.

Trinn 3-Vise Produktinformasjon Fra MySQL-Databasen

med produktinformasjon og bilder i databasen, skal du nå kode et ANNET PHP-skript som spør og viser produktinformasjonen i ET HTML-bord i nettleseren din.

skriv inn følgende for å opprette filen:

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

deretter skriver du inn følgende informasjon i filen:

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

Lagre endringene i filen og lukk den.

her har du igjen tatt med config.php – filen for å koble til databasen. Deretter har du forberedt OG utført EN SQL-setning ved HJELP AV PDO for å hente alle elementer fra tabellen products ved hjelp av kommandoen SELECT * FROM products.

deretter har du opprettet EN HTML-tabell og fylt den med produktdataene ved HJELP AV PHP while() {...} – setningen. Linjen $row = $stmt->fetch(PDO::FETCH_ASSOC) spør databasen og lagrer resultatet i $row – variabelen som en flerdimensjonal matrise, som du deretter har vist i EN HTML – tabellkolonne ved hjelp av syntaksen $row.

bildene fra kolonnen product_image er vedlagt i <img src = ""> – kodene. Du har brukt attributtene width og height til å endre størrelsen på bildene til en mindre størrelse som får plass i HTML-tabellkolonnen.

for å konvertere dataene som holdes av datatypen BLOB tilbake til bilder, har du brukt DEN innebygde PHP base64_encode – funksjonen og følgende syntaks for Data URI-skjemaet:

data:media_type;base64, base_64_encoded_data

i dette tilfellet er image/png media_type og den Base64 kodede strengen fra kolonnen product_image base_64_encoded_data.

kjør deretter display_products.php – filen i en nettleser ved å skrive inn følgende adresse:

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

etter å ha kjørt display_products.php – filen i nettleseren din, vil du se ET HTML-bord med en liste over produkter og tilhørende bilder.

Liste over produkter Fra MySQL database

dette bekrefter AT PHP-skriptet for henting av bilder fra MySQL fungerer som forventet.

Konklusjon

i denne veiledningen brukte Du MySQL BLOB datatypen til å lagre og vise bilder MED PHP på Ubuntu 18.04. Du har også sett de grunnleggende fordelene ved å lagre bilder i en database i motsetning til å lagre dem i et filsystem. Disse inkluderer portabilitet, sikkerhet og enkel sikkerhetskopiering. Hvis du bygger et program som en studentportal eller en ansattdatabase som krever at informasjon og relaterte bilder lagres sammen, kan denne teknologien være til stor nytte for deg.

for mer informasjon om de støttede datatypene i MySQL følg mysql Datatyper guide. Hvis du er interessert i ytterligere innhold knyttet Til MySQL og PHP, sjekk ut følgende opplæringsprogrammer:

  • Slik Implementerer Du Paginering I MySQL med PHP På Ubuntu 18.04
  • Slik Bruker DU PDO PHP-Utvidelsen Til Å Utføre MySQL-Transaksjoner I PHP på Ubuntu 18.04

Leave a Reply

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.