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:
OutputQuery 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:
OutputQuery 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:
OutputQuery 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:
OutputQuery 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:
OutputDatabase 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 oszlopBIGINT
adattípust használ a termékek nagy listájának befogadására, legfeljebb 2-ig3-1 elemek. Az oszlopotPRIMARY 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, aAUTO_INCREMENT
kulcsszót használta. -
product_name
: ez az oszlop tartalmazza a termékek nevét. AVARCHAR
adattípust használta, mivel ez a mező általában legfeljebb50
karakterek alfanumerikus értékét kezeli—a50
határ csak egy hipotetikus érték, amelyet az oktatóanyag céljára használnak. -
price
: demonstrációs célokra aproducts
táblázat tartalmazza aprice
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), aDOUBLE
adattípust használta. -
product_image
: ez az oszlopBLOB
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:
OutputQuery OK, 0 rows affected (0.03 sec)
jelentkezzen ki a MySQL szerverről:
- QUIT;
a következő kimenetet kapja
OutputBye
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:
<?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ó atest_company
adatbázis nevét tartalmazza. -
DB_USER
: ez a változó atest_user
felhasználónevet tartalmazza. -
DB_PASSWORD
: ez az állandó tárolja a MySQLPASSWORD
atest_user
számla. -
DB_HOST
: ez azt a kiszolgálót jelöli, ahol az adatbázis található. Ebben az esetben alocalhost
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:
<?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.
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:
<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.
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