Podatkovno zbirko v MySQL oziroma MariaDB ustvarimo s stavkom CREATE DATABASE. Takšno opravilo praviloma izvedemo pred začetkom uporabe aplikacije, saj mora aplikacija imeti pripravljeno podatkovno zbirko, preden lahko ustvari tabele in vanje zapisuje podatke.
V PHP lahko podatkovno zbirko ustvarimo z vmesnikom mysqli ali PDO. V obeh primerih se najprej povežemo s strežnikom podatkovne baze, nato izvedemo ukaz za ustvarjanje podatkovne zbirke in preverimo, ali je bil ukaz uspešen.
Pomni: Pri ustvarjanju podatkovne zbirke se običajno povežemo samo s strežnikom, ne pa še z določeno podatkovno zbirko, ker ta v tem trenutku morda še ne obstaja.
V resnični aplikaciji podatkovne zbirke praviloma ne ustvarjamo ob vsakem obisku strani. Ustvarjanje baze izvedemo v ločenem namestitvenem, administrativnem ali pripravljalnem koraku.
Vsebina strani
Osnovna pravila
Pri ustvarjanju podatkovne zbirke iz PHP kode je treba razlikovati med povezavo do strežnika in povezavo do že izbrane podatkovne zbirke.
- Za ustvarjanje nove podatkovne zbirke se najprej povežemo s strežnikom podatkovne baze.
- Pri tej povezavi imena podatkovne zbirke navadno še ne navedemo.
- Za ustvarjanje podatkovne zbirke uporabimo ukaz
CREATE DATABASE. - Če želimo preprečiti napako, kadar podatkovna zbirka že obstaja, uporabimo
CREATE DATABASE IF NOT EXISTS. - Uporabnik, s katerim se povezujemo, mora imeti ustrezne pravice za ustvarjanje podatkovnih zbirk.
- Po ustvarjanju podatkovne zbirke lahko v naslednjih korakih ustvarimo tabele in druge objekte.
Pozor: Če uporabnik podatkovne baze nima pravice za izvajanje ukaza CREATE DATABASE, ukaz ne bo uspešen, tudi če so podatki za povezavo pravilni.
Kreiranje podatkovne zbirke
Osnovna sintaksa za ustvarjanje nove podatkovne zbirke je:
CREATE DATABASE dbIme;
Če želimo preprečiti napako, kadar podatkovna zbirka že obstaja, uporabimo:
CREATE DATABASE IF NOT EXISTS dbIme;
Pri povezavi za kreiranje podatkovne zbirke navadno navedemo ime strežnika, uporabniško ime in geslo. Imena podatkovne zbirke pri povezavi še ne navedemo, ker podatkovna zbirka v tem koraku morda še ne obstaja.
Pomni: Dodatek IF NOT EXISTS ne pomeni, da se bo obstoječa podatkovna zbirka izbrisala ali prepisala. Pomeni samo, da se ukaz ne zaključi z napako, če zbirka že obstaja.
Osnovni primer z mysqli
Spodnji zgled vzpostavi povezavo do strežnika in nato ustvari podatkovno zbirko, če ta še ne obstaja.
<?php
// Podatki za povezavo s strežnikom MySQL oziroma MariaDB
define('DB_SERVER', 'localhost');
define('DB_USER', 'uporabnik');
define('DB_PASS', 'skritoGeslo');
// Povezava do strežnika brez izbire baze
$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS);
// Preverjanje povezave
if (!$connection) {
die(
'Povezava s strežnikom ni vzpostavljena: ' .
mysqli_connect_error() .
' (' . mysqli_connect_errno() . ')'
);
}
// SQL stavek za kreiranje baze
$sql = "CREATE DATABASE IF NOT EXISTS dbIme";
// Izvedba ukaza in preverjanje rezultata
if (mysqli_query($connection, $sql)) {
echo "Podatkovna zbirka je pripravljena.";
} else {
echo "Napaka pri kreiranju podatkovne zbirke: " . mysqli_error($connection);
}
// Zapiranje povezave
mysqli_close($connection);
?>
V primeru z mysqli uporabimo funkcijo mysqli_connect() za povezavo s strežnikom, funkcijo mysqli_query() za izvedbo ukaza in funkcijo mysqli_close() za zapiranje povezave.
Osnovni primer s PDO
Enako nalogo lahko izvedemo tudi z vmesnikom PDO. Pri tem je pogosto priporočljivo vključiti način poročanja napak z izjemami.
<?php
// Podatki za povezavo
$streznik = 'localhost';
$uporabnik = 'uporabnik';
$geslo = 'skritoGeslo';
try {
// Povezava do strežnika brez izbire baze
$pdo = new PDO("mysql:host=$streznik", $uporabnik, $geslo);
// Vklop izjem pri napakah
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Kreiranje baze, če ta še ne obstaja
$sql = "CREATE DATABASE IF NOT EXISTS dbIme";
// Izvedba SQL ukaza
$pdo->exec($sql);
echo "Podatkovna zbirka je pripravljena.";
}
catch (PDOException $e) {
echo "Napaka pri kreiranju podatkovne zbirke: " . $e->getMessage();
}
?>
Pri PDO ukaz, ki ne vrača rezultatne tabele, pogosto izvedemo z metodo exec(). Napake lahko obravnavamo z blokoma try in catch.
Razlika med mysqli in PDO
Oba pristopa omogočata ustvarjanje podatkovne zbirke, vendar se razlikujeta v načinu uporabe in prenosljivosti.
| Lastnost | mysqli |
PDO |
|---|---|---|
| Namen | Delo z MySQL oziroma MariaDB. | Enotnejši način dela z različnimi podatkovnimi bazami. |
| Način zapisa | Postopkovni ali objektni. | Objektni. |
| Izvajanje ukaza za kreiranje baze | mysqli_query() |
$pdo->exec() |
| Obravnava napak | Preverjanje rezultata in uporaba funkcij za napake. | Pogosto z izjemami try in catch. |
| Primernost za aplikacijo Knjige | Možna uporaba. | Primeren pristop, ker je aplikacija zasnovana s PDO. |
mysqli je primeren za delo z MySQL oziroma MariaDB, PDO pa je uporaben, kadar želimo objektni in bolj prenosljiv pristop k delu s podatkovnimi bazami.
Aplikacija Knjige
📘Aplikacija Knjige
V priloženi aplikaciji Knjige je korak 02_kreiranjeDB.php namenjen pojasnilu priprave podatkovne zbirke. Ker gre za aplikacijo s PDO, je ta zgled primeren za povezavo med učno razlago in aplikacijskim pristopom.
Stran poudari, da se podatkovna zbirka praviloma pripravi v ločenem namestitvenem skriptu, ne ob vsakem odpiranju strani. Tak pristop je preglednejši, varnejši in primernejši za resnično aplikacijo.
02_kreiranjeDB.phpNavodila za izdelavo aplikacije Knjige
- Najprej vzpostavimo povezavo do strežnika MySQL oziroma MariaDB.
- Pripravimo stavek CREATE DATABASE IF NOT EXISTS.
- Ukaz izvedemo in preverimo rezultat.
- Pri
PDOnapake navadno obravnavamo z izjemami. - V resnični aplikaciji takšno opravilo pogosto prestavimo v ločen namestitveni korak.
Pozor: Namestitvenih skript, ki ustvarjajo ali spreminjajo podatkovno zbirko, po končani namestitvi ne puščamo javno dostopnih brez nadzora. Takšne skripte lahko vplivajo na zgradbo ali vsebino podatkovne baze.
Priporočila
- Podatkovno zbirko ustvari v ločenem pripravljalnem ali namestitvenem koraku.
- Za ustvarjanje baze uporabi
CREATE DATABASE IF NOT EXISTS, kadar želiš preprečiti napako ob že obstoječi bazi. - Pri povezavi za ustvarjanje baze imena baze praviloma še ne navajaj.
- Podatke za povezavo hrani v ločeni konfiguracijski datoteki.
- Za produkcijsko okolje ne izpisuj podrobnih tehničnih napak uporabnikom.
- Uporabniku podatkovne baze dodeli samo tiste pravice, ki jih res potrebuje.
- Pri aplikaciji s
PDOuporabljaj obravnavo napak z izjemami.
Pogoste napake
- Pri povezavi za ustvarjanje podatkovne zbirke je navedeno ime baze, ki še ne obstaja.
- Uporabnik podatkovne baze nima pravice za izvajanje ukaza
CREATE DATABASE. - Namesto
CREATE DATABASE IF NOT EXISTSje uporabljenCREATE DATABASE, zato se ob obstoječi bazi pojavi napaka. - Namestitveni ukaz se izvaja ob vsakem obisku strani.
- Podatki za povezavo so zapisani neposredno v več različnih datotekah.
- Napake se javno izpisujejo z občutljivimi podatki o strežniku ali uporabniku.
- Po izvedbi namestitvenega koraka ni preverjeno, ali je bila podatkovna zbirka res ustvarjena.
Ustvarjanje podatkovne zbirke je administrativno opravilo. V učnih primerih ga lahko izvedemo iz PHP strani, v urejeni aplikaciji pa ga praviloma ločimo od običajnega delovanja spletne strani.