Ko imamo podatkovno zbirko in tabelo že pripravljeno, lahko vanjo uvozimo začetne podatke. Pri tem pogosto uporabimo ukaz INSERT INTO ali ločeno datoteko, v kateri so pripravljeni ukazi za vnos podatkov.
Uvoz začetnih podatkov je uporaben pri pripravi aplikacije, saj lahko z njim hitro napolnimo tabelo s preizkusnimi ali osnovnimi podatki. V aplikaciji Knjige se podatki uvozijo iz pripravljene datoteke knjige.sql.
Pomni: Pred uvozom podatkov morata biti podatkovna zbirka in tabela že ustvarjeni. Podatki se morajo ujemati z zgradbo tabele, predvsem s številom stolpcev, podatkovnimi tipi in obveznimi vrednostmi.
Za manjše število zapisov lahko uporabimo neposreden ukaz INSERT INTO. Za več začetnih podatkov pa je pogosto preglednejša ločena datoteka, na primer knjige.sql.
Vsebina strani
Osnovna pravila
Pri uvozu podatkov v tabelo moramo preveriti, ali so podatki skladni z zgradbo tabele. Vsaka vrednost mora ustrezati stolpcu, v katerega jo vstavljamo.
- Tabela, v katero uvažamo podatke, mora že obstajati.
- Ime tabele mora biti zapisano pravilno.
- Število navedenih stolpcev se mora ujemati s številom vrednosti.
- Besedilne vrednosti zapišemo med enojne narekovaje.
- Številske vrednosti običajno zapišemo brez narekovajev.
- Vrednosti morajo ustrezati podatkovnim tipom stolpcev.
- Pri uvozu iz datoteke mora biti pot do datoteke pravilna.
Pozor: Če ima tabela obvezne stolpce z omejitvijo NOT NULL, moramo zanje podati vrednosti, razen če imajo nastavljene privzete vrednosti.
Uvoz podatkov v tabelo
Podatke lahko v tabelo dodajamo ročno z ukazom INSERT INTO, pri večjem številu zapisov pa je pregledneje, da pripravimo ločeno datoteko in jo nato uvozimo.
Osnovna sintaksa za vnos enega zapisa je:
INSERT INTO imeTabele (stolpec1, stolpec2, stolpec3)
VALUES (vrednost1, vrednost2, vrednost3);
Z enim ukazom lahko dodamo tudi več zapisov hkrati:
INSERT INTO imeTabele (stolpec1, stolpec2)
VALUES
(vrednost1a, vrednost2a),
(vrednost1b, vrednost2b),
(vrednost1c, vrednost2c);
Pri takem zapisu je pomembno, da ima vsaka vrstica v delu VALUES enako število vrednosti in da se te vrednosti ujemajo z navedenimi stolpci.
Pomni: Pri ukazu INSERT INTO je priporočljivo navesti seznam stolpcev. Tako je jasneje, katera vrednost se vstavi v kateri stolpec.
Osnovni primer z mysqli
Spodnji zgled v tabelo knjige doda nekaj začetnih zapisov.
<?php
define('DB_SERVER', 'localhost');
define('DB_USER', 'uporabnik');
define('DB_PASS', 'skritoGeslo');
define('DB_NAME', 'knjiznica');
// Povezava do podatkovne zbirke
$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
// Preverjanje povezave
if (!$connection) {
die(
'Povezava s podatkovno zbirko ni vzpostavljena: ' .
mysqli_connect_error() .
' (' . mysqli_connect_errno() . ')'
);
}
// SQL ukaz za vstavljanje več zapisov
$sql = "INSERT INTO knjige (Priimek_avtorja, Ime_avtorja, Naslov, Strani, Cena, Leto)
VALUES
('Novak', 'Janez', 'Osnove podatkovnih baz', 220, 24.90, 2022),
('Kovač', 'Maja', 'Uvod v PHP', 180, 19.50, 2021),
('Horvat', 'Ana', 'Spletne aplikacije', 310, 29.99, 2023)";
// Izvedba ukaza
if (mysqli_query($connection, $sql)) {
echo 'Podatki so bili uspešno uvoženi.';
} else {
echo 'Napaka pri uvozu podatkov: ' . mysqli_error($connection);
}
// Zapiranje povezave
mysqli_close($connection);
?>
Pri pristopu z mysqli podatke vstavimo z ukazom INSERT INTO, ki ga izvedemo s funkcijo mysqli_query(). Rezultat izvedbe preverimo in po koncu dela povezavo zapremo.
Osnovni primer s PDO
Tudi z vmesnikom PDO lahko izvedemo uvoz podatkov z ukazom INSERT INTO. Ker ta ukaz ne vrača rezultatne tabele, ga lahko izvedemo z metodo exec().
<?php
$streznik = 'localhost';
$baza = 'knjiznica';
$uporabnik = 'uporabnik';
$geslo = 'skritoGeslo';
try {
// Povezava do podatkovne zbirke
$pdo = new PDO("mysql:host=$streznik;dbname=$baza;charset=utf8mb4", $uporabnik, $geslo);
// Vklop izjem pri napakah
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SQL ukaz za vstavljanje podatkov
$sql = "INSERT INTO knjige (Priimek_avtorja, Ime_avtorja, Naslov, Strani, Cena, Leto)
VALUES
('Novak', 'Janez', 'Osnove podatkovnih baz', 220, 24.90, 2022),
('Kovač', 'Maja', 'Uvod v PHP', 180, 19.50, 2021),
('Horvat', 'Ana', 'Spletne aplikacije', 310, 29.99, 2023)";
// Izvedba SQL ukaza
$pdo->exec($sql);
echo 'Podatki so bili uspešno uvoženi.';
}
catch (PDOException $e) {
echo 'Napaka pri uvozu podatkov: ' . $e->getMessage();
}
?>
Pri PDO lahko napake obravnavamo z izjemami. To omogoča preglednejše ločevanje glavnega dela programa in obravnave napak.
Uvoz iz datoteke SQL
Pri večjem številu začetnih podatkov je pogosto smiselno pripraviti ločeno datoteko, na primer knjige.sql. Takšna datoteka lahko vsebuje enega ali več ukazov za ustvarjanje zgradbe in vstavljanje podatkov.
V aplikacijskem pristopu datoteko običajno preberemo, iz nje pripravimo posamezne zaključene ukaze in jih izvedemo prek povezave s podatkovno bazo.
$datoteka = 'knjige.sql';
$vsebina = file_get_contents($datoteka);
$pdo->exec($vsebina);
Preprost zapis je primeren za razumljive datoteke z znano vsebino. Pri zahtevnejših datotekah pa je treba paziti na komentarje, prazne vrstice, večstavčne ukaze in varno obravnavo napak.
Pozor: Datotek SQL ne izvajamo iz nepreverjenih virov. Ukazi v takšni datoteki lahko ustvarjajo, spreminjajo ali brišejo podatke.
Primerjava načinov uvoza
Podatke lahko v tabelo vstavimo neposredno v kodi ali jih uvozimo iz ločene datoteke. Vsak pristop ima svoje prednosti.
| Način | Prednosti | Omejitve |
|---|---|---|
INSERT INTO v kodi |
Primeren za manjše število zapisov in jasen učni primer. | Pri več podatkih postane koda nepregledna. |
več vrstic v VALUES |
Z enim ukazom dodamo več zapisov. | Vse vrstice morajo imeti skladno število vrednosti. |
datoteka knjige.sql |
Podatki so ločeni od PHP kode in jih lažje ponovno uporabimo. | Pot do datoteke in vsebina datoteke morata biti pravilni. |
| uvoz prek aplikacijske funkcije | Omogoča nadzor nad komentarji, praznimi vrsticami in napakami. | Zahteva več kode in bolj premišljeno obravnavo napak. |
Aplikacija Knjige
📘Aplikacija Knjige
V priloženi aplikaciji Knjige je v datoteki 04_uvozDB.php prikazan uvoz strukture oziroma podatkov iz pripravljene datoteke knjige.sql v podatkovno zbirko aplikacije.
Funkcija za uvoz datoteko prebere po vrsticah, preskoči prazne vrstice in komentarje, nato pa posamezne zaključene ukaze izvede prek PDO. Tak pristop je primeren za pregledno pripravo začetnih podatkov aplikacije.
04_uvozDB.phpNavodila za izdelavo aplikacije Knjige
- Najprej ustvarimo podatkovno zbirko in tabelo.
- Pripravimo datoteko knjige.sql z ukazi za vnos podatkov.
- Določimo pot do datoteke, ki jo želimo uvoziti.
- Datoteko preberemo po vrsticah.
- Preskočimo prazne vrstice in komentarje.
- Ko je ukaz zaključen s podpičjem, ga izvedemo prek metode
exec(). - Na koncu uporabniku prikažemo, ali je bil uvoz uspešen, in izpišemo uporabljeno datoteko.
Pomni: Ločena datoteka z začetnimi podatki omogoča, da lahko podatkovno zbirko ponovno pripravimo ali obnovimo na bolj nadzorovan način.
Priporočila
- Pred uvozom preveri, ali podatkovna zbirka in tabela že obstajata.
- Pri ukazu
INSERT INTOnavedi seznam stolpcev. - Preveri, ali se število stolpcev ujema s številom vrednosti.
- Za besedilne vrednosti uporabi enojne narekovaje.
- Za cene uporabi vrednosti, ki ustrezajo tipu
DECIMAL. - Datoteko
knjige.sqlhrani na znani in nadzorovani poti. - Pri uvozu iz datoteke preveri prazne vrstice, komentarje in zaključna podpičja.
- V produkcijskem okolju ne izvajaj nepreverjenih datotek SQL.
Pogoste napake
- Tabela, v katero uvažamo podatke, še ne obstaja.
- Ime tabele ali stolpca je zapisano napačno.
- Število vrednosti se ne ujema s številom navedenih stolpcev.
- Besedilne vrednosti niso zapisane med enojnimi narekovaji.
- Vrednost ne ustreza podatkovnemu tipu stolpca.
- Datoteka
knjige.sqlni na pričakovani poti. - Ukaz v datoteki ni zaključen s podpičjem.
- Uvoz se ponovno izvede in povzroči podvojene podatke.
Uvoz začetnih podatkov naj bo nadzorovan korak priprave aplikacije. Če isti uvoz izvedemo večkrat, lahko v tabeli nastanejo podvojeni zapisi, razen če je uvoz zasnovan tako, da to prepreči.