Skip navigation

Az adatok beszúrása az adatbázisba

db_fuggvenyek.php

Végül eljutottunk a tényleges adatbáziskezelésig. A db_fuggvenyek.php-ban két függvényt definiálunk. Egyet a csatlakozáshoz, egyet pedig könyvek felviteléhez. Megjegyezzük, hogy minden adatbáziskezeléshez hasonlóképpen kellene eljárni Külön függvényeket kell készíteni, amelyeket az űrlapokotól és a feldolgozó oldalaktól elkülönítve tárolunk (olyan jogosultsággal, amely kívülről nem látható).

Az adatbázishoz történő csatlakozás a konyvtar_csatlakozas() függvényben van megvalósítva. Itt  ki is választjuk az adatbázist és be is állítjuk a karakterkódolást az adatok kezelése előtt.

A konyvet_beszur() függvény paraméterül kapja a könyv adatait. Először meghívjuk a konyvtar_csatlakozas() függvényt a csatlakozáshoz, majd előkészítjük az adatok beszúrását. Az újabb PHP változatok már az alábbi megoldásokat preferálják. Az INSERT INTO utasítást a mysqli_prepare() függvénybe írjuk bele, azonban az értékeket nem itt adjuk meg, helyükre kérdőjeleket írunk. Az értékek megadásának biztonságos módja az SQL utasításhoz történő hozzákötés a mysqli_stmt_bind_param() függvény segítségével. Ennek második paramétere egy olyan (formátum)sztring, amely megmondja a függvénynek, hogy mely változót milyen típusúnak kell tekintenie (s=sztring, d=egész szám). Ezt követően a mysqli_stmt_execute() függvénnyel kell végrehajtani az utasítást. 

Természetesen, a PHP-ben is megjelent már az objektum-orientált szemlélet és a fenti metódusok objektum-orientált változatai is alkalmazhatók.

<?php

function konyvtar_csatlakozas() {
    
    $conn = mysqli_connect("localhost", "root", "") or die("Csatlakozási hiba");
    if ( false == mysqli_select_db($conn, "KONYVTAR" )  ) {
        
        return null;
    }
    
    // a karakterek helyes megjelenítése miatt be kell állítani a karakterkódolást!
    mysqli_query($conn, 'SET NAMES UTF-8');
    mysqli_query($conn, 'SET character_set_results=utf8');
    mysqli_set_charset($conn, 'utf8');
    
    return $conn;
    
}

function konyvet_beszur($konyvszam, $szerzo, $cim, $kiado, $ev) {
 
    if ( !($conn = konyvtar_csatlakozas()) ) { // ha nem sikerult csatlakozni, akkor kilepunk
        return false;
    }
   
    // elokeszitjuk az utasitast
    $stmt = mysqli_prepare( $conn,"INSERT INTO KONYVEK(konyvszam, szerzo, cim, kiado, ev) VALUES (?, ?, ?, ?, ?)");
    
    // bekotjuk a parametereket (igy biztonsagosabb az adatkezeles)
    mysqli_stmt_bind_param($stmt, "ssssd", $konyvszam, $szerzo, $cim, $kiado, $ev );
    
    // lefuttatjuk az SQL utasitast
   $sikeres = mysqli_stmt_execute($stmt);
        // ez logikai erteket ad vissza, ami megmondja, hogy sikerult-e
        // vegrehajtani az utasitast
    mysql_close($conn);
    return $sikeres;
}
?>

Hibakezelések, kivétel kezelések

Megjegyezzük, hogy a die() függvény, bár nagyon kézenfekvő és egyszerű, a gyakorlatban kevésbé praktikus. Célszerű lehet átírni a kivételkezelést try-catch blokkokba.

Adatbázis műveletek PDO-val

Az adatbázis műveleteket nem csak a mysqli_ prefixű függvényekkel hajthatjuk végre, hanem használhatjuk a PDO függvénykönyvtárat is. A fenti kódrészletet az alábbiak szerint kell módosítani. Adatbiztonsági szempontból fontos, hogy az SQL utasításba külön kössük be a külső értékeket és ne fűzzük hozzá az utasításhoz. Erre szolgál a PDOStatement::bindParam() függvénye. A bekötendő paramétereket kettősponttal jelezhetjük az utasításban, így könnyebben tudunk rájuk hivatkozni.

<?php

function konyvtar_csatlakozas() {

    try {
        $conn = new PDO("mysql:host=localhost;dbname=KONYVTAR;charset=utf8", "root", "");
    } catch (PDOException $ex) {
        echo "Csatlakozási hiba: " . $ex->getMessage();
    }

    return $conn;
}

function konyvet_beszur($konyvszam, $szerzo, $cim, $kiado, $ev) {

    if ( !($conn = konyvtar_csatlakozas()) ) { // ha nem sikerult csatlakozni, akkor kilepunk
        die("Hiba a csatlakozásnál");
    }

    // elokeszitjuk az utasitast
    $stmt = $conn->prepare('INSERT INTO KONYVEK(konyvszam, szerzo, cim, kiado, ev) VALUES (:konyvszam, :szerzo, :cim, :kiado, :ev)');

    // bekotjuk a parametereket (igy biztonsagosabb az adatkezeles)
    $stmt->bindParam(':konyvszam',$konyvszam, PDO::PARAM_STR, 20);
    $stmt->bindParam(':szerzo',$szerzo, PDO::PARAM_STR, 100);
    $stmt->bindParam(':cim', $cim, PDO::PARAM_STR, 60);
    $stmt->bindParam(':kiado',$kiado, PDO::PARAM_STR, 60);
    $stmt->bindParam(':ev', $ev, PDO::PARAM_INT);

    // lefuttatjuk az SQL utasitast
    $stmt->execute();

    // $stmt->debugDumpParams(); // debuggoláshoz

    $stmt = null;
    $conn = null;
    return true;
}
?>