Ko imamo podatkovno zbirko in tabelo že pripravljeno, lahko vanjo
uvozimo začetne podatke. Pri tem pogosto uporabimo SQL datoteko,
ki vsebuje enega ali več ukazov INSERT INTO.
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 SQL 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 uvozu moramo paziti, da se podatki ujemajo s strukturo tabele, da je število stolpcev pravilno in da so vrednosti zapisane v ustreznih podatkovnih tipih.
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);
?>
Osnovni primer s PDO
Tudi z vmesnikom PDO lahko izvedemo uvoz podatkov
z ukazom INSERT INTO ali pa iz SQL datoteke preberemo
več zaporednih SQL ukazov.
<?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();
}
?>
Pomembnosti pri uvozu podatkov
- ime tabele mora biti pravilno zapisano,
- število navedenih stolpcev se mora ujemati s številom vrednosti,
- vrednosti morajo biti v pravilnem podatkovnem tipu,
- besedilo zapisujemo v narekovajih, števila pa navadno brez njih,
- pri večjem številu zapisov je pogosto pregledneje uporabiti SQL datoteko.
📘Aplikacija Knjige
V priloženi aplikaciji Knjige je v datoteki 04_uvozDB.php prikazan uvoz SQL 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 SQL ukaze izvede prek PDO.
Navodila za izdelavo aplikacije Knjige
- Najprej ustvarimo podatkovno zbirko in tabelo.
- Pripravimo SQL datoteko z ukazi za vnos podatkov.
- Določimo pot do datoteke, na primer knjige.sql.
- Datoteko preberemo po vrsticah in preskočimo prazne vrstice ter komentarje.
- Ko je SQL ukaz zaključen s podpičjem, ga izvedemo prek PDO metode
exec(). - Na koncu uporabniku prikažemo, ali je bil uvoz uspešen, in izpišemo uporabljeno datoteko.
Pri učenju je smiselno poznati oba pristopa:
- mysqli za neposreden vnos zapisov z ukazom
INSERT INTO, - PDO za enostaven vnos ali izvedbo več SQL ukazov,
- aplikacijski pristop, kjer podatke uvozimo iz ločene SQL datoteke.