miten MySQL BLOB-tietotyyppiä käytetään kuvien tallentamiseen PHP: llä Ubuntu 18.04: ssä

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:

Output
Query 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:

Output
Query 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:

Output
Query 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:

Output
Query 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ää:

Output
Database 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ään BIGINT-tietotyyppiä, jotta voidaan sijoittaa suuri tuoteluettelo, joka voi olla enintään 2⁶3-1 tuotetta. Olet merkinnyt sarakkeen arvoksi PRIMARY KEY yksilöidäksesi tuotteet. Jotta MySQL hoitaisi uusien tunnisteiden generoinnin lisättyjä sarakkeita varten, on käytetty avainsanaa AUTO_INCREMENT.

  • product_name: tässä sarakkeessa on tuotteiden nimet. Olet käyttänyt VARCHAR tietotyyppiä, koska tämä kenttä käsittelee yleensä aakkosnumeerisia merkkejä enintään 50 merkkiä—raja-arvo 50 on vain hypoteettinen arvo, jota käytetään tässä opetusohjelmassa.

  • price: esittelytarkoituksia varten products – taulukossa on price sarake tuotteiden vähittäismyyntihinnan tallentamiseksi. Koska joillakin tuotteilla voi olla kelluvia arvoja (esimerkiksi 23.69, 45.36, 102.99), olet käyttänyt DOUBLE tietotyyppiä.

  • product_image: tässä sarakkeessa käytetään BLOB – 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:

Output
Query OK, 0 rows affected (0.03 sec)

Kirjaudu ulos MySQL-palvelimeltasi:

  • QUIT;

saat seuraavan tuotoksen

Output
Bye

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:

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

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 on test_company – tietokannan nimi.

  • DB_USER : tällä muuttujalla on test_user käyttäjätunnus.

  • DB_PASSWORD : tämä vakio säilyttää test_user – tilin MySQL PASSWORD.

  • DB_HOST: tämä edustaa palvelinta, jossa tietokanta sijaitsee. Tällöin käytetään localhost – 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:

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

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.

menestysviesti, joka osoittaa, 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:

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

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.

luettelo MySQL-tietokannan tuotteista

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ä

Leave a Reply

Vastaa

Sähköpostiosoitettasi ei julkaista.