NA VRH
DOMOV HTML CSS JavaScript jQuery AngularJS PHP MySQL Python C# Sass WordPress
glave/headings

MySQL Povezava na strežnik Ustvarjanje tabele Vpisovanje podatka Vpisovanje podatkov Izpis zadnje zaporedne številke Database Branje tabele Pripravljene izjave in vezani parametri Izbira podatkov config.php WHERE ORDER BY Izbris podatkov Posodabljanje podatkov Omejitev izbire podatkov

Pripravljen stavek je funkcija, ki se uporablja za večkratno izvajanje istih (ali podobnih) SQL stavkov z visoko učinkovitostjo. Pripravljene izjave v bistvu delujejo kot:

Priprava (ang. Prepare) SQL predloga stavka se ustvari, in pošlje v bazo podatkov, medtem ko nekatere vrednosti ostanejo nedoločene. Nedoločene vrednosti se imenujejo parametri, ki so označeni z vprašajem. Primer bi bil: INSERT INTO mojaTabela (slo. Vstavite v vrednost mojaTabela) in v oklepajih vprašanja (?, ?, ?).
Baza podatkov (ang. Database) Baza podatkov razčleni, prevede in izvede optimizacijo poizvedbe na predlogi SQL stavka, in rezultat shrani brez, da bi ga izvedla.
Izvedba (ang. Execute) Aplikacija nato veže vrednosti na parametre, baza podatkov pa stavek izvrši. Aplikacija lahko stavek izvede tolikokrat kot želi, in ga izvede z različnimi vrednostmi.

V primerjavi z neposrednimi izvajanjem SQL stavkov, imajo pripravljene izjave tri glavne prednosti. Te prednosti so:

Pripravljeni stavki skrajšajo čas razčlenjevanja, saj je priprava poizvedbe (ang. Query) izvedena samo enkrat, čeprav se stavek izvede večkrat.
Vezani parametri zmanjšajo pasovno širino na strežnik, saj moramo vsakič poslati samo parametre, in ne celotne poizvedbe (ang. Query).
Pripravljeni stavki so zelo koristni za SQL vbrizgavanje, ker vrednosti parametrov, ki se kasneje prenesejo z drugim protokolom, ni potrebno pravilno ubežati. Če izvirna predloga stavka ne izhaja iz zunanjega vhoda, SQL vbrizgavanje ni mogoče.

Novi zapiski so bili uspešno izvedeni!

    <?php
    $host = "ip strežnika";
    $uporabnik = "uporabniško ime";
    $geslo = "geslo";
    $database = "ime baze";

    $povezava = new mysqli($host, $uporabnik, $geslo, $database);

    if ($povezava->connect_error) {
        die("Povezava trenutni ni izvedljiva: " . $povezava->connect_error);
    }

    $izvedba = $povezava->prepare ("INSERT INTO mojaTabela (firstname, lastname) VALUES (?, ?)");
    $izvedba->bind_param ("ss", $firstname, $lastname);

    // prvi parameter
    $firstname = "Peter";
    $lastname = "Klepec";
    $izvedba->execute ();

    // drugi parameter
    $firstname = "Mojca";
    $lastname = "Pokraculja";
    $izvedba->execute ();

    // tretji parameter
    $firstname = "Banana";
    $lastname = "njam";
    $izvedba->execute ();

    // četrti parameter
    $firstname = "Kotlovnik";
    $lastname = "Greben";
    $izvedba->execute ();

    // peti parameter
    $firstname = "Janez";
    $lastname = "Kranjski";
    $izvedba->execute ();

    echo "Novi zapiski so bili uspešno izvedeni!";

    $izvedba->close ();
    $povezava->close ();
    ?>
            

V našo obstoječo tabelo smo uvozili nove podatke, kot prikazuje slika.

Pripravljene izjave in vezani parametri

Če si pogledamo funkcijo bind_param() kamor smo vpisali $izvedba->bind_param ("ss", $firstname, $lastname);. Funkcija veže parametre glede na SQL poizvedbo, in bazi podatkov pove, kakšni so parametri. Argument ss navaja vrste podatkov, in MySQL-u sporoča, da je parameter niz (ang. String). Ne moremo, kar pisati poljubnih črk za argumente, in napišemo jih toliko, kolikor imamo vpisanih lastnosti ($lastname, $firstname). Argumenti so lahko sledeči:

i celo število (ang. integer)
d decimalna števila (ang. Double)
s niz (ang. string)
b BLOB (Binary Large Object (slo. Binarni velik objekt)) je velik podatkovni tip objekta v bazi podatkov. BLOB lahko shrani velik del podatkov, vrst dokumentov in celo predstavnostih datotek (video, audio). BLOB polje dodeljuje prostor samo, ko je uporabljena vsebina v polju. BLOB dodeli prostor v GB (giga-bajtih).

Za vsak parameter moramo dodati enega od teh argumentov. Če bi uporabili $firstname, $lastname in $age bi dali ssi, če pa bi za $age uporabili decimalno številko, pa bi morali napisati ssd. Če povemo mysqli, katero vrsto podatkov pričakujemo, s tem zmanjšamo tveganje za SQL vbrizgavanje.

Za izbiranje podatkov iz ene ali več tabel, se uporablja stavek SELECT. V naslednjem primeru bomo izbrali firstname in lastname iz tabele mojaTabela.

Oseba => Borut Bukovnik
Oseba => Janez Kranjski
Oseba => Peter Cuderman
Oseba => Jana Faštrovec
Oseba => Petra Vojvoda
Oseba => Helena Horvat
Oseba => Janko Pravljični
Oseba => Metka Pokraculja
Oseba => Pater Kranjski
Oseba => Viktor Vladni
Oseba => Borut Jest
Oseba => Renata Rozman
Oseba => Pastir Cvetko
Oseba => Modri Dirkač
Oseba => Zadnji Vpisani
Oseba => Peter Klepec
Oseba => Mojca Pokraculja
Oseba => Banana njam
Oseba => Kotlovnik Greben
Oseba => Janez Kranjski
            
    <?php
    $host = "ip strežnika";
    $uporabnik = "uporabniško ime";
    $geslo = "geslo";
    $database = "ime baze podatkov (ang. Database)";

    $povezava = mysqli_connect ($host, $uporabnik, $geslo, $database);

    if (!$povezava) {
        die("Povezava trenutno ni mogoča!" . mysqli_connect_error ());
    }

    $sql = "SELECT firstname, lastname FROM mojaTabela";
    $rezultat = mysqli_query ($povezava, $sql);

    if (mysqli_num_rows ($rezultat) > 0) {
        while ($vrstica = mysqli_fetch_assoc ($rezultat)) {
            echo "Oseba => " . $vrstica["firstname"] . " " . $vrstica["lastname"] . "<br>";
        }
    }   else {
        echo "NI REZULTATOV!";
    }

    mysqli_close ($povezava);
    ?>
            

Če želimo podatke izpisati v HTML obliki, to naredimo na sledeči način.

ZAPOREDNA ŠTEVILKA IME PRIIMEK
1 Borut Bukovnik
3 Peter Cuderman
13 Pastir Cvetko
14 Modri Dirkač
4 Jana Faštrovec
20 Kotlovnik Greben
6 Helena Horvat
11 Borut Jest
17 Peter Klepec
9 Pater Kranjski
2 Janez Kranjski
21 Janez Kranjski
19 Banana njam
8 Metka Pokraculja
18 Mojca Pokraculja
7 Janko Pravljični
12 Renata Rozman
10 Viktor Vladni
5 Petra Vojvoda
15 Zadnji Vpisani
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>izberi in razdeli</title>
    </head>
    <style>
        table, th, td {
            border: 1px solid black;
            padding: 5px;
        }
    </style>
    <body>
    <?php
    include 'config.php';

    $povezava = mysqli_connect ($host, $uporabnik, $geslo, $database);

    if (!$povezava) {
        die("Povezava trenutno ni mogoča!" . mysqli_connect_error ());
    }

    $sql = "SELECT id, firstname, lastname FROM mojaTabela ORDER BY lastname";
    $rezultati = mysqli_query ($povezava, $sql);

    if (mysqli_num_rows ($rezultati) > 0) {
        echo "<table><tr><th>ZAPOREDNA ŠTEVILKA</th><th>IME</th><th>PRIIMEK</th></tr>";
        while ($vrstica = mysqli_fetch_assoc ($rezultati)) {
            echo "<tr><th>" . $vrstica['id'] . "</th><td>" . $vrstica["firstname"] . "</td><td>" . $vrstica["lastname"] . "</td></tr>";
        }
        echo "</table>";
    }   else {
        echo "NI REZULTATOV!";
    }

    mysqli_close ($povezava);
    </body>
    </html>
            

Ko pišemo HTML datoteko, ali na splošno PHP za vpis ali branje iz MySQL, da si izdelamo config.php datoteko katera vsebuje naše zaupne podatke. Preprosto si izdelamo config.php datoteko in vanjo vpišemo:

    <?php
    $host = "ip strežnika";
    $uporabnik = "uporabniško ime";
    $geslo = "geslo";
    $baza = "ime baze podatkov (ang. Database)";
    ?>
    

Potem samo uporabimo include, da jo uvozimo v druge PHP datoteke, in sicer <?php include 'config.php';?> - za prvi test preizkusite sledeče:

    <?php
    include('config.php');
    echo "Host: ".$host." Database: ".$database;
    ?>
    

Zgornja preprosta koda vam izpiše ip naslov in ime podatkovne baze, to je samo za config.php test.

Stavek WHERE se uporablja za izvleček samo tistih zapiskov, ki izpolnjujejo določen pogoj. Pomeni, da lahko s tem stavkom iščemo po priimkih ali imenih vseh shranjenih v tabeli.

Oseba => Janez Kranjski
Oseba => Pater Kranjski
Oseba => Janez Kranjski
            
    <?php
    include 'config.php';

    $povezava = mysqli_connect ($host, $uporabnik, $geslo, $database);

    if (!$povezava) {
        die("Povezava ni mogoča! " . mysqli_connect_error ());
    }

    $sql = "SELECT firstname, lastname FROM mojaTabela WHERE lastname='Kranjski'";
    $rezultati = mysqli_query ($povezava, $sql);

    if (mysqli_num_rows ($rezultati) > 0) {
        while ($vrstica = mysqli_fetch_assoc ($rezultati)) {
            echo "Oseba => " . $vrstica["firstname"] . " " . $vrstica["lastname"] . "<br>";
        }
    }   else {
        echo "NI REZULTATOV!";
    }

    mysqli_close ($povezava);
    ?>
            

Tabela v HTML-ju z uporabo sloga.

IME PRIIMEK
Janez Kranjski
Pater Kranjski
Janez Kranjski
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>izberi in razdeli</title>
    </head>
    <style>
        table th, td {
            border: 1px solid black;
            padding: 5px;
        }
        th {
            background-color: #333333;
            color: #e9daac;
        }
        td {
            background-color: #adff2f;
            color: #333333;
        }
    </style>
    <body>
    <?php
    include 'config.php';

    $povezava = mysqli_connect ($host, $uporabnik, $geslo, $database);

    if (!$povezava) {
        die("Povezava ni mogoča! " . mysqli_connect_error ());
    }

    $sql = "SELECT firstname, lastname FROM mojaTabela WHERE lastname='Kranjski'";
    $rezultati = mysqli_query ($povezava, $sql);

    if (mysqli_num_rows ($rezultati) > 0) {
        echo "<table><tr><th>IME</th><th>PRIIMEK</th></tr>";
        while ($vrstica = mysqli_fetch_assoc ($rezultati)) {
            echo "<tr><td>" . $vrstica["firstname"] . "</td><td>" . $vrstica["lastname"] . "</td></tr>";
        }
        echo "</table>";
    }   else {
        echo "NI REZULTATOV!";
    }

    mysqli_close ($povezava);
    ?>
    </body>
    </html>
            
1 2 3