hogyan kell használni a MySQL BLOB adattípust képek tárolására PHP-vel az Ubuntu 18.04-en

a szerző kiválasztotta azokat a lányokat, akik kódot kapnak, hogy adományt kapjanak a Write for DOnations program részeként.

Bevezetés

a bináris Nagyobjektum (BLOB) egy MySQL adattípus, amely képes bináris adatok, például képek, multimédia és PDF fájlok tárolására.

olyan alkalmazások létrehozásakor, amelyek szorosan összekapcsolt adatbázist igényelnek, ahol a képeknek szinkronban kell lenniük a kapcsolódó adatokkal (például alkalmazotti portál, hallgatói adatbázis vagy pénzügyi alkalmazás), kényelmesnek találhatja a képeket, például a diákok útlevélfotóit és aláírásait a MySQL adatbázisban más kapcsolódó információk mellett.

itt jön be a MySQL BLOB adattípus. Ez a programozási megközelítés kiküszöböli a különálló fájlrendszer létrehozásának szükségességét a képek tárolására. A séma központosítja az adatbázist is, így hordozhatóbbá és biztonságosabbá válik, mivel az adatok el vannak szigetelve a fájlrendszertől. A biztonsági mentések létrehozása szintén zökkenőmentesebb, mivel egyetlen MySQL dump fájlt hozhat létre, amely tartalmazza az összes adatot.

az Adatok lekérése gyorsabb, és a rekordok létrehozásakor biztos lehet benne, hogy az adatellenőrzési szabályok és a referenciális integritás fennmarad, különösen a MySQL tranzakciók használata esetén.

ebben az oktatóanyagban a MySQL BLOB adattípust fogja használni a képek PHP-vel történő tárolására az Ubuntu 18.04-en.

előfeltételek

az útmutató követéséhez a következőkre lesz szüksége:

  • egy Ubuntu 18.04 szerver, amelyet az Ubuntu 18.04 kezdeti Szerverbeállításával konfiguráltak, és egy nem root felhasználó, aki sudo jogosultságokkal rendelkezik.
  • az Apache, a MySQL és a PHP beállítása a Linux, Apache, MySQL, PHP (LAMP) verem Ubuntu 18.04-re történő telepítésének útmutatóját követve. Ehhez az oktatóanyaghoz nem szükséges virtuális gazdagépeket létrehozni, így kihagyhatja a 4.lépést.

1.lépés — adatbázis létrehozása

a projekt mintaadatbázisának létrehozásával indul. Ehhez SSH be a szerverre, majd futtassa a következő parancsot, hogy bejelentkezzen a MySQL szerverre rootként:

  • sudo mysql -u root -p

írja be a MySQL adatbázis root jelszavát, majd nyomja meg a ENTER gombot a folytatáshoz.

ezután futtassa a következő parancsot adatbázis létrehozásához. Ebben az oktatóanyagban megnevezzük test_company:

  • CREATE DATABASE test_company;

az adatbázis létrehozása után a következő kimenetet fogja látni:

Output
Query OK, 1 row affected (0.01 sec)

ezután hozzon létre egy test_user fiókot a MySQL szerveren, és ne felejtse el helyettesíteni a PASSWORD – et egy erős jelszóval:

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

a következő kimenet jelenik meg:

Output
Query OK, 0 rows affected (0.01 sec)

a test_user teljes Jogosultságok megadása a test_company adatbázisban, fuss:

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

győződjön meg róla, hogy a következő kimenetet kapja:

Output
Query OK, 0 rows affected (0.01 sec)

végül öblítse le a privilégiumok táblát, hogy a MySQL újratöltse az engedélyeket:

  • FLUSH PRIVILEGES;

győződjön meg róla, hogy a következő kimenetet látja:

Output
Query OK, 0 rows affected (0.01 sec)

most, hogy az test_company adatbázis és a test_user készen áll, folytassa a products táblázat létrehozásával a minta termékek tárolására. Ezt a táblázatot később rekordok beszúrására és lekérésére fogja használni, hogy bemutassa a MySQL BLOB működését.

kijelentkezés a MySQL szerverről:

  • QUIT;

ezután jelentkezzen be újra a létrehozott test_user hitelesítő adataival:

  • mysql -u test_user -p

amikor a rendszer kéri, írja be a test_user jelszavát, majd nyomja meg a ENTER gombot a folytatáshoz. Ezután váltson az test_company adatbázisra a következő beírásával:

  • USE test_company;

Miután kiválasztotta a test_company adatbázist, a MySQL megjelenik:

Output
Database changed

ezután hozzon létre egy products táblát:

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

ez a parancs létrehoz egy products nevű táblát. A táblázat négy oszlopot tartalmaz:

  • product_id: Ez az oszlop BIGINT adattípust használ a termékek nagy listájának befogadására, legfeljebb 2-ig3-1 elemek. Az oszlopot PRIMARY KEY – ként jelölte meg a termékek egyedi azonosításához. Annak érdekében, hogy a MySQL kezelje a beillesztett oszlopok új azonosítóinak generálását, a AUTO_INCREMENTkulcsszót használta.

  • product_name: ez az oszlop tartalmazza a termékek nevét. A VARCHAR adattípust használta, mivel ez a mező általában legfeljebb 50 karakterek alfanumerikus értékét kezeli—a 50 határ csak egy hipotetikus érték, amelyet az oktatóanyag céljára használnak.

  • price: demonstrációs célokra a products táblázat tartalmazza a price oszlopot a termékek kiskereskedelmi árának tárolására. Mivel egyes termékek lebegő értékekkel rendelkezhetnek (például 23,69, 45,36, 102,99), a DOUBLE adattípust használta.

  • product_image: ez az oszlop BLOB adattípust használ a termékek képeinek tényleges bináris adatainak tárolására.

már használta a InnoDB tároló ENGINE a tábla, hogy támogassa a széles körű funkciók, beleértve a MySQL tranzakciókat. Miután végrehajtotta ezt a products tábla létrehozásához, a következő kimenet jelenik meg:

Output
Query OK, 0 rows affected (0.03 sec)

jelentkezzen ki a MySQL szerverről:

  • QUIT;

a következő kimenetet kapja

Output
Bye

a products táblázat készen áll néhány rekord tárolására, beleértve a termékek képeit is, és a következő lépésben feltölti néhány termékkel.

2.lépés — PHP szkriptek létrehozása az adatbázis csatlakoztatásához és feltöltéséhez

ebben a lépésben létrehoz egy PHP szkriptet, amely csatlakozik az 1. lépésben létrehozott MySQL adatbázishoz. A szkript Három minta terméket készít elő, és beilleszti őket a products táblázatba.

a PHP kód létrehozásához nyisson meg egy új fájlt a szövegszerkesztővel:

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

ezután írja be a következő információkat a fájlba, és cserélje le a PASSWORD – et az 1.lépésben létrehozott test_user jelszóra:

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

mentse és zárja be a fájlt.

ebben a fájlban négy PHP állandót használt a lépésben létrehozott MySQL adatbázishoz való csatlakozáshoz 1:

  • DB_NAME : ez az állandó a test_company adatbázis nevét tartalmazza.

  • DB_USER : ez a változó a test_user felhasználónevet tartalmazza.

  • DB_PASSWORD : ez az állandó tárolja a MySQL PASSWORD a test_user számla.

  • DB_HOST: ez azt a kiszolgálót jelöli, ahol az adatbázis található. Ebben az esetben a localhost szervert használja.

a következő sor a fájlban egy PHP Adatobjektumot (OEM) indít, és csatlakozik a MySQL adatbázishoz:

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

a fájl vége felé beállított néhány OEM attribútumot:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: Ez az attribútum arra utasítja az OEM-t, hogy dobjon egy kivételt, amely hibakeresési célokra naplózható.
  • ATTR_EMULATE_PREPARES, false: ez az opció növeli a biztonságot, ha azt mondja a MySQL adatbázismotornak, hogy az OEM helyett készítse el az előkészítést.

a /var/www/html/config.php fájlt két PHP szkriptbe fogja belefoglalni, amelyeket a rekordok beszúrásához, illetve visszakereséséhez hoz létre.

először hozza létre a /var/www/html/insert_products.php PHP szkriptet a rekordok beillesztéséhez a termékek táblába:

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

ezután adja hozzá a következő információkat a /var/www/html/insert_products.php fájlba:

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

mentse és zárja be a fájlt.

a fájlban a config.php fájlt a tetejére helyezte. Ez az első fájl, amelyet az adatbázis változóinak meghatározásához és az adatbázishoz való csatlakozáshoz hozott létre. A fájl egy OEM objektumot is kezdeményez, és egy $pdo változóban tárolja.

ezután létrehozott egy tömböt a termékek adataiból, amelyeket be kell illeszteni az adatbázisba. A product_name és price karakterláncokon és numerikus értékeken kívül a szkript a PHP beépített file_get_contents függvényét használja a képek külső forrásból történő olvasására és stringként történő továbbítására a product_image oszlopba.

ezután elkészítette az SQL utasítást, és a PHP foreach{...} utasítást használta az egyes termékek beillesztésére az adatbázisba.

a /var/www/html/insert_products.php fájl végrehajtásához futtassa azt a böngészőablakban a következő URL segítségével. Ne felejtse el kicserélni a your-server-IP értéket a kiszolgáló nyilvános IP-címére:

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

a fájl végrehajtása után megjelenik egy sikeres üzenet a böngészőben, amely megerősíti a rekordok beillesztését az adatbázisba.

sikeres üzenet, amely azt mutatja, hogy rekordokat illesztettek be az adatbázisba

sikeresen beillesztett három, termékképeket tartalmazó rekordot a products táblázatba. A következő lépésben létrehoz egy PHP szkriptet ezeknek a rekordoknak a letöltésére és megjelenítésére a böngészőben.

3.lépés — a termékek információinak megjelenítése a MySQL adatbázisból

a termékek információival és képeivel az adatbázisban most egy másik PHP szkriptet fog kódolni, amely lekérdezi és megjeleníti a termékek információit a böngésző HTML táblázatában.

a fájl létrehozásához írja be a következőket:

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

ezután írja be a következő információkat a fájlba:

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

mentse el a fájl módosításait, majd zárja be.

itt ismét hozzáadta a config.php fájlt, hogy csatlakozzon az adatbázishoz. Ezután elkészítette és végrehajtotta az SQL utasítást az OEM használatával a products tábla összes elemének lekéréséhez a SELECT * FROM products paranccsal.

ezután létrehoztál egy HTML táblát, és feltöltötted a termékek adataival a PHP while() {...} utasítás segítségével. A $row = $stmt->fetch(PDO::FETCH_ASSOC) sor lekérdezi az adatbázist, és az eredményt a $row változóban tárolja többdimenziós tömbként, amelyet ezután egy HTML táblázat oszlopban jelenít meg a $row szintaxis segítségével.

a product_image oszlopban található képek a <img src = ""> címkéken belül találhatók. A width és height attribútumokat használta a képek kisebb méretre történő átméretezéséhez, amely elfér a HTML táblázat oszlopban.

a BLOB adattípus által tárolt adatok képekké alakításához a beépített PHP base64_encode függvényt és a következő szintaxist használta az adat URI sémához:

data:media_type;base64, base_64_encoded_data

ebben az esetben a image/png a media_type, a Base64 kódolt karakterlánc a product_image oszlopból a base_64_encoded_data.

ezután hajtsa végre a display_products.php fájlt egy webböngészőben a következő cím beírásával:

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

miután futtatta a display_products.php fájlt a böngészőben, megjelenik egy HTML táblázat a termékek listájával és a kapcsolódó képekkel.

termékek listája a MySQL adatbázisból

ez megerősíti, hogy a MySQL-ből származó képek letöltésére szolgáló PHP szkript a várt módon működik.

következtetés

ebben az útmutatóban a MySQL BLOB adattípust használta a képek tárolására és megjelenítésére PHP-vel az Ubuntu 18.04-en. Látta a képek adatbázisban történő tárolásának alapvető előnyeit is, szemben a fájlrendszerben történő tárolással. Ezek közé tartozik a hordozhatóság, a biztonság és a könnyű biztonsági mentés. Ha olyan alkalmazást épít, mint például egy hallgatói portál vagy alkalmazottak adatbázisa, amely megköveteli az információk és a kapcsolódó képek együttes tárolását, akkor ez a technológia nagy hasznát veheti Önnek.

a MySQL támogatott adattípusaival kapcsolatos további információkért kövesse a MySQL adattípusok útmutatót. Ha érdekel a MySQL-hez és a PHP-hez kapcsolódó további tartalom, nézd meg a következő oktatóanyagokat:

  • hogyan kell végrehajtani a lapozás a MySQL PHP Ubuntu 18.04
  • hogyan kell használni az OEM PHP kiterjesztés elvégzésére MySQL tranzakciók PHP Ubuntu 18.04

Leave a Reply

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.