kirjoittaja valitsi tytöt, jotka koodaavat saadakseen lahjoituksen osana Write for DOnations-ohjelmaa.
Johdanto
binäärinen Suuri objekti (BLOB
) on MySQL-tietotyyppi, joka voi tallentaa binääritietoa, kuten kuvia, multimediaa ja PDF-tiedostoja.
kun luot sovelluksia, jotka vaativat tiivistä tietokantaa, jossa kuvien pitäisi olla synkronoituina toisiinsa liittyvien tietojen kanssa (esimerkiksi työntekijäportaali, opiskelijatietokanta tai rahoitussovellus), saatat huomata käteväksi tallentaa kuvia, kuten opiskelijoiden passikuvia ja allekirjoituksia MySQL-tietokantaan muiden asiaan liittyvien tietojen rinnalle.
tässä kohtaa tulee MySQL BLOB
tietotyyppi. Tämä ohjelmointitapa poistaa tarpeen luoda erillinen tiedostojärjestelmä kuvien tallentamiseen. Järjestelmä myös keskittää tietokannan, mikä tekee siitä kannettavamman ja turvallisemman, koska tieto on eristetty tiedostojärjestelmästä. Varmuuskopioiden luominen on myös saumattomampaa, koska voit luoda yhden MySQL dump-tiedoston, joka sisältää kaikki tietosi.
tiedon hakeminen on nopeampaa, ja tietueita luotaessa voi olla varma, että tietojen validointisäännöt ja referentiaalinen eheys säilyvät erityisesti MySQL-transaktioita käytettäessä.
tässä opetusohjelmassa käytät MySQL BLOB
– tietotyyppiä kuvien tallentamiseen PHP: llä Ubuntu 18.04: ssä.
Edeltävät opinnot
tämän oppaan mukana tarvitset seuraavat:
- Ubuntu 18.04-palvelin on määritetty käyttäen alkuperäistä Palvelinasetusta Ubuntu 18.04: n kanssa ja ei-pääkäyttäjä, jolla on
sudo
– oikeudet. - Apache, MySQL ja PHP perustetaan noudattamalla opasta Linux -, Apache -, MySQL -, PHP (lamppu) – pinon asentamisesta Ubuntu 18.04: ssä. Tämän opetusohjelman, se ei ole tarpeen luoda virtuaalisia isäntiä, joten voit ohittaa vaiheen 4.
Vaihe 1-tietokannan luominen
aloitat luomalla esimerkkitietokannan projektillesi. Voit tehdä tämän, SSH palvelimeen ja suorita seuraava komento kirjautua MySQL-palvelimeen root:
- sudo mysql -u root -p
Anna MySQL-tietokannan pääsalasana ja paina ENTER
jatkaaksesi.
suorita sitten seuraava komento luodaksesi tietokannan. Tässä opetusohjelmassa nimeämme sen test_company
:
- CREATE DATABASE test_company;
kun tietokanta on luotu, näet seuraavan tulosteen:
OutputQuery OK, 1 row affected (0.01 sec)
luo seuraavaksi test_user
– tili MySQL-palvelimelle ja muista korvata PASSWORD
vahvalla salasanalla:
- CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';
näet seuraavan tuotoksen:
OutputQuery OK, 0 rows affected (0.01 sec)
myöntää test_user
täydet oikeudet test_company
tietokantaan, ajaa:
- GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';
varmista, että saat seuraavan tulosteen:
OutputQuery OK, 0 rows affected (0.01 sec)
lopuksi huuhtele etuoikeudet-taulukko, jotta MySQL lataa käyttöoikeudet uudelleen:
- FLUSH PRIVILEGES;
varmista, että näet seuraavan tuotoksen:
OutputQuery OK, 0 rows affected (0.01 sec)
nyt kun test_company
tietokanta ja test_user
ovat valmiit, siirrytään luomaan products
taulukko näytetuotteiden tallentamiseen. Tämän taulukon avulla voit myöhemmin lisätä ja hakea tietueita osoittaaksesi, miten MySQL BLOB
toimii.
Kirjaudu ulos MySQL-palvelimelta:
- QUIT;
kirjaudu sitten takaisin luomiesi test_user
tunnuksilla:
- mysql -u test_user -p
pyydettäessä anna test_user
: n salasana ja paina ENTER
jatkaaksesi. Seuraavaksi siirrytään test_company
– tietokantaan kirjoittamalla seuraava:
- USE test_company;
kun test_company
tietokanta on valittu, MySQL näyttää:
OutputDatabase changed
luo seuraavaksi products
– taulukko ajamalla:
- CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;
tämä komento luo taulukon, jonka nimi on products
. Taulukossa on neljä saraketta:
-
product_id
: Tässä sarakkeessa käytetäänBIGINT
-tietotyyppiä, jotta voidaan sijoittaa suuri tuoteluettelo, joka voi olla enintään 2⁶3-1 tuotetta. Olet merkinnyt sarakkeen arvoksiPRIMARY KEY
yksilöidäksesi tuotteet. Jotta MySQL hoitaisi uusien tunnisteiden generoinnin lisättyjä sarakkeita varten, on käytetty avainsanaaAUTO_INCREMENT
. -
product_name
: tässä sarakkeessa on tuotteiden nimet. Olet käyttänytVARCHAR
tietotyyppiä, koska tämä kenttä käsittelee yleensä aakkosnumeerisia merkkejä enintään50
merkkiä—raja-arvo50
on vain hypoteettinen arvo, jota käytetään tässä opetusohjelmassa. -
price
: esittelytarkoituksia vartenproducts
– taulukossa onprice
sarake tuotteiden vähittäismyyntihinnan tallentamiseksi. Koska joillakin tuotteilla voi olla kelluvia arvoja (esimerkiksi 23.69, 45.36, 102.99), olet käyttänytDOUBLE
tietotyyppiä. -
product_image
: tässä sarakkeessa käytetäänBLOB
– tietotyyppiä tuotteiden kuvien binaaritietojen tallentamiseen.
olet käyttänyt InnoDB
tallennustilaa ENGINE
taulukkoon tukemaan monenlaisia ominaisuuksia, kuten MySQL-tapahtumia. Kun olet suorittanut tämän products
– taulukon luomiseksi, näet seuraavan tulosteen:
OutputQuery OK, 0 rows affected (0.03 sec)
Kirjaudu ulos MySQL-palvelimeltasi:
- QUIT;
saat seuraavan tuotoksen
OutputBye
products
taulukko on nyt valmis tallentamaan joitakin tietueita sisältäen tuotteiden kuvat ja kansoitat sen joillakin tuotteilla seuraavassa vaiheessa.
Vaihe 2 — PHP-skriptien luominen tietokannan yhdistämiseksi ja Kansoittamiseksi
tässä vaiheessa luot PHP-skriptin, joka muodostaa yhteyden MySQL-tietokantaan, jonka loit vaiheessa 1. Skripti valmistaa kolme näytetuotetta ja lisää ne products
– taulukkoon.
luodaksesi PHP-koodin, avaa uusi tiedosto tekstieditorilla:
- sudo nano /var/www/html/config.php
kirjoita sitten seuraavat tiedot tiedostoon ja korvaa PASSWORD
test_user
salasanalla, jonka olet luonut vaiheessa 1:
<?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);
Tallenna ja sulje tiedosto.
tässä tiedostossa olet käyttänyt neljää PHP-vakiota Muodostaaksesi yhteyden MySQL-tietokantaan, jonka loit vaiheessa 1:
-
DB_NAME
: tällä vakiolla ontest_company
– tietokannan nimi. -
DB_USER
: tällä muuttujalla ontest_user
käyttäjätunnus. -
DB_PASSWORD
: tämä vakio säilyttäätest_user
– tilin MySQLPASSWORD
. -
DB_HOST
: tämä edustaa palvelinta, jossa tietokanta sijaitsee. Tällöin käytetäänlocalhost
– palvelinta.
seuraava rivi tiedostossasi käynnistää PHP Data Object (SAN) ja muodostaa yhteyden MySQL-tietokantaan:
...$pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);...
tiedoston loppupuolella olet määrittänyt muutaman San-attribuutin:
-
ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
: Tämä attribuutti ohjaa San: n heittämään poikkeuksen, joka voidaan kirjata vianetsintää varten. -
ATTR_EMULATE_PREPARES, false
: tämä vaihtoehto lisää turvallisuutta kertomalla MySQL-tietokantamoottorin tekevän valmistelun San: n sijaan.
sisällytät /var/www/html/config.php
– tiedoston kahteen PHP-skriptiin, jotka luot seuraavaksi tietueiden lisäämistä ja hakemista varten.
luo ensin /var/www/html/insert_products.php
PHP-skripti tietueiden lisäämiseksi tuotetaulukkoon:
- sudo nano /var/www/html/insert_products.php
lisää sitten /var/www/html/insert_products.php
– tiedostoon seuraavat tiedot:
<?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";
Tallenna ja sulje tiedosto.
tiedostossa olet sisällyttänyt config.php
tiedoston yläreunaan. Tämä on ensimmäinen tiedosto, jonka loit tietokantamuuttujien määrittelyä ja tietokantaan yhdistämistä varten. Tiedosto käynnistää myös San-objektin ja tallentaa sen muuttujaan $pdo
.
seuraavaksi olet luonut joukon tuotteiden tietoja lisättäväksi tietokantaan. Lukuun ottamatta product_name
ja price
, jotka laaditaan merkkijonoina ja numeerisina arvoina, skripti käyttää PHP: n sisäänrakennettua file_get_contents
funktiota lukea kuvia ulkoisesta lähteestä ja välittää ne merkkijonoina product_image
– sarakkeeseen.
seuraavaksi olet laatinut SQL-lausekkeen ja käyttänyt PHP foreach{...}
– lauseketta lisätäksesi jokaisen tuotteen tietokantaan.
suorittaaksesi /var/www/html/insert_products.php
– tiedoston, suorita se selainikkunassasi seuraavan URL-osoitteen avulla. Muista korvata your-server-IP
palvelimen julkisella IP-osoitteella:
http://your-server-IP/insert_products.php
tiedoston suorittamisen jälkeen näet selaimessasi menestysviestin, jossa vahvistetaan, että tietueet on lisätty tietokantaan.
olet onnistuneesti lisännyt products
taulukkoon kolme tuotekuvia sisältävää levyä. Seuraavassa vaiheessa, luot PHP script hakemiseen nämä tietueet ja näyttää ne selaimessasi.
Vaihe 3-tuotteiden tietojen näyttäminen MySQL-tietokannasta
tuotteiden tiedot ja kuvat tietokannassa, olet nyt menossa koodaamaan toista PHP-komentosarjaa, joka tiedustelee ja näyttää tuotteiden tiedot selaimesi HTML-taulukossa.
luodaksesi tiedoston, kirjoita seuraava:
- sudo nano /var/www/html/display_products.php
kirjoita sitten seuraavat tiedot tiedostoon:
<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>
Tallenna muutokset tiedostoon ja sulje se.
tässä on taas mukana config.php
– tiedosto, jotta voi muodostaa yhteyden tietokantaan. Tämän jälkeen olet laatinut ja suorittanut SQL-lausekkeen San: n avulla hakeaksesi kaikki kohteet products
– taulukosta käyttäen SELECT * FROM products
– komentoa.
Next, you have created a HTML table and asked it with the products ’ data using the PHP while() {...}
statement. Rivi $row = $stmt->fetch(PDO::FETCH_ASSOC)
tiedustelee tietokantaa ja tallentaa tuloksen $row
muuttujaan moniulotteisena jonona, jonka olet sitten näyttänyt HTML-taulukon sarakkeessa käyttäen syntaksia $row
.
product_image
sarakkeen kuvat on suljettu <img src = "">
tagien sisään. Olet käyttänyt määritteitä width
ja height
muuttaaksesi kuvien kokoa pienemmäksi, joka mahtuu HTML-taulukon sarakkeeseen.
muuttaaksesi BLOB
tietotyypin hallussa olevat tiedot takaisin kuviksi, olet käyttänyt sisäänrakennettua PHP base64_encode
– toimintoa ja seuraavaa Data URI-järjestelmän syntaksia:
data:media_type;base64, base_64_encoded_data
tällöin image/png
on media_type
ja Base64
koodattu merkkijono product_image
– sarakkeesta on base_64_encoded_data
.
suorita seuraavaksi display_products.php
– tiedosto verkkoselaimessa kirjoittamalla seuraava osoite:
http://your-server-IP/display_products.php
kun olet ajanut display_products.php
– tiedoston selaimessasi, näet HTML-taulukon, jossa on luettelo tuotteista ja niihin liittyvistä kuvista.
tämä vahvistaa, että MySQL: n kuvien hakemiseen tarkoitettu PHP-skripti toimii odotetusti.
johtopäätös
tässä oppaassa käytit MySQL BLOB
tietotyyppiä kuvien tallentamiseen ja näyttämiseen PHP: llä Ubuntu 18.04: ssä. Olet myös nähnyt perusetuja tallentaa kuvia tietokantaan eikä tallentaa ne tiedostojärjestelmään. Näitä ovat siirrettävyys, turvallisuus ja varmuuskopioinnin helppous. Jos rakennat sovellusta, kuten opiskelijoiden portaalia tai työntekijöiden tietokantaa, joka vaatii tietojen ja niihin liittyvien kuvien tallentamista yhteen, tästä teknologiasta voi olla sinulle paljon hyötyä.
lisätietoja MySQL: n tuetuista tietotyypeistä saa MySQL: n tietotyypit-oppaasta. Jos olet kiinnostunut mySQL: ään ja PHP: hen liittyvästä lisäsisällöstä, tutustu seuraaviin oppaisiin:
- kuinka toteuttaa sivutus MySQL: ssä PHP: n kanssa Ubuntu 18.04: ssä
- miten käyttää San PHP-laajennusta MySQL-tapahtumien suorittamiseen PHP: ssä Ubuntu 18.04: ssä