MySQL je sistem za upravljanje relacijskih podatkovnih baz. Podatki so shranjeni v tabelah, tabele pa so sestavljene iz stolpcev in vrstic. Vsaka vrstica običajno predstavlja en zapis, stolpci pa določajo vrste podatkov, ki jih hranimo.
Za delo z MySQL uporabljamo jezik SQL. Z njim ustvarjamo podatkovne baze in tabele, vstavljamo podatke, jih spreminjamo, brišemo in iz njih pridobivamo izbrane informacije.
Pomni: MySQL skrbi za shranjevanje in urejanje podatkov, SQL pa je jezik, s katerim podatkovni bazi podamo navodila.

Logo MySQL
Osnovna pravila
Pri delu s podatkovno bazo je pomembno, da razumemo nekaj osnovnih pravil:
- podatki so organizirani v tabele,
- vsaka tabela ima stolpce, ki določajo vrsto podatkov,
- vsaka vrstica v tabeli predstavlja en zapis,
- za poizvedovanje in spreminjanje podatkov uporabljamo SQL ukaze,
- v spletnih aplikacijah do podatkovne baze običajno dostopamo prek strežniškega jezika, na primer PHP.
Relacijska podatkovna baza omogoča, da podatke razdelimo v več smiselnih tabel. Tako se izognemo nepotrebnemu ponavljanju podatkov in lažje skrbimo za njihovo pravilnost.
Primerjava med MySQL, SQL in PHP
Pri izdelavi dinamične spletne strani imajo MySQL, SQL in PHP različne naloge.
| Pojem | Vloga pri spletni aplikaciji |
|---|---|
| MySQL | Sistem za upravljanje podatkovne baze. Hrani podatke v tabelah in skrbi za njihovo urejanje. |
| SQL | Jezik za delo s podatkovno bazo. Z njim pišemo ukaze, kot so SELECT, INSERT, UPDATE in DELETE. |
| PHP | Strežniški programski jezik. Izvede povezavo s podatkovno bazo, pošlje SQL ukaz in obdela vrnjene podatke. |
Pozor: MySQL in SQL nista isto. MySQL je podatkovni sistem, SQL pa je jezik, s katerim podatkovnemu sistemu pošiljamo ukaze.
Osnovni primer poizvedbe SQL
Stavek SELECT uporabimo, kadar želimo iz tabele pridobiti podatke. Naslednja poizvedba pridobi vse stolpce in vse zapise iz tabele uporabniki:
SELECT * FROM uporabniki;
Znak * pomeni, da želimo izpisati vse stolpce. Pri resničnih aplikacijah je pogosto bolje navesti samo tiste stolpce, ki jih res potrebujemo.
SELECT id, uporabnisko_ime, email
FROM uporabniki;
Pomni: SQL ukazi so pogosto zapisani z velikimi črkami, na primer SELECT in FROM. To ni obvezno, vendar je zapis preglednejši.
Primer poizvedbe s pogojem
Če želimo pridobiti samo določene zapise, uporabimo pogoj WHERE. V naslednjem primeru izberemo samo uporabnike, ki imajo v stolpcu nivo vrednost admin:
SELECT *
FROM uporabniki
WHERE nivo = 'admin';
Pogoj WHERE je zelo pomemben tudi pri ukazih UPDATE in DELETE, saj določa, kateri zapisi se spremenijo ali izbrišejo.
Pozor: Pri ukazih UPDATE in DELETE lahko manjkajoč pogoj WHERE povzroči spremembo ali izbris vseh zapisov v tabeli.
PHP in MySQL
V spletnih aplikacijah podatkovne baze običajno ne uporabljamo neposredno, temveč prek programske kode. V PHP za povezavo z MySQL danes uporabljamo predvsem mysqli ali PDO.
Stare funkcije iz razširitve mysql, na primer mysql_query(), se v sodobnem PHP ne uporabljajo več. Nadomestila sta jih vmesnika mysqli in PDO, ki omogočata varnejše in preglednejše delo.
mysqli |
PDO |
|---|---|
|
|
Primer z mysqli
V naslednjem primeru se PHP poveže s podatkovno bazo, izvede poizvedbo in izpiše uporabniška imena uporabnikov z nivojem admin:
<?php
$povezava = mysqli_connect("localhost", "uporabnik", "geslo", "moja_baza");
if (!$povezava) {
die("Povezava ni uspela: " . mysqli_connect_error());
}
$sql = "SELECT uporabnisko_ime FROM uporabniki WHERE nivo = 'admin'";
$result = mysqli_query($povezava, $sql);
while ($vrstica = mysqli_fetch_assoc($result)) {
echo $vrstica['uporabnisko_ime'] . "<br>";
}
mysqli_close($povezava);
?>
Primer s PDO
Enako nalogo lahko izvedemo tudi z vmesnikom PDO. Pri povezavi je smiselno določiti tudi nabor znakov utf8mb4, saj omogoča pravilen zapis širokega nabora znakov Unicode.
<?php
$pdo = new PDO(
"mysql:host=localhost;dbname=moja_baza;charset=utf8mb4",
"uporabnik",
"geslo"
);
$sql = "SELECT uporabnisko_ime FROM uporabniki WHERE nivo = 'admin'";
$stmt = $pdo->query($sql);
while ($vrstica = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $vrstica['uporabnisko_ime'] . "<br>";
}
?>
Pri novih projektih je priporočljivo uporabljati nabor znakov utf8mb4, ker omogoča shranjevanje širšega nabora znakov kot starejši zapis utf8 oziroma utf8mb3.
Pripravljeni stavki
Kadar so v SQL poizvedbo vključeni podatki uporabnika, je treba uporabiti pripravljene stavke. Pri pripravljenem stavku se SQL ukaz najprej pripravi, vrednosti pa se nato pošljejo ločeno kot parametri.
Primer pripravljenega stavka s PDO:
<?php
$pdo = new PDO(
"mysql:host=localhost;dbname=moja_baza;charset=utf8mb4",
"uporabnik",
"geslo"
);
$sql = "SELECT uporabnisko_ime FROM uporabniki WHERE nivo = :nivo";
$stmt = $pdo->prepare($sql);
$stmt->execute(['nivo' => 'admin']);
while ($vrstica = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $vrstica['uporabnisko_ime'] . "<br>";
}
?>
Pomni: Podatkov, ki jih vnese uporabnik, ne vključujemo neposredno v SQL stavek. Varnejši pristop je uporaba pripravljenih stavkov in parametrov.
Priporočila
- Za dostop do MySQL v PHP uporabljaj
mysqlialiPDO. - Pri novih projektih uporabi nabor znakov
utf8mb4. - Pri poizvedbah z uporabniškimi podatki uporabi pripravljene stavke.
- V poizvedbah izbiraj samo tiste stolpce, ki jih aplikacija res potrebuje.
- Podatke za povezavo s podatkovno bazo hrani v ločeni konfiguracijski datoteki.
- Napake obravnavaj nadzorovano in jih ne izpisuj neposredno uporabnikom aplikacije.
Pogoste napake
- Zamenjevanje pojmov MySQL, SQL in PHP.
- Uporaba zastarelih funkcij iz stare razširitve
mysql. - Neposredno vključevanje uporabniških podatkov v SQL poizvedbo.
- Uporaba znaka
*tudi takrat, ko aplikacija potrebuje samo nekaj stolpcev. - Manjkajoč pogoj
WHEREpri ukazih za spreminjanje ali brisanje podatkov. - Neustrezno nastavljen nabor znakov, zaradi česar se lahko posebni znaki prikažejo nepravilno.
Pri delu s podatkovno bazo je treba razlikovati med napakami v SQL stavku, napakami pri povezavi in napakami pri obdelavi rezultatov. Vsako vrsto napake je treba preveriti na ustreznem mestu v programu.