HTML

WebKuvik - Hu húúú

Az olalon webfejlesztéssel kapcsolatos infókat, híreket és anyagokat találhattok.

Friss topikok

Címkék

PDO - Adatbázis absztrakció egyszerűen

2011.12.23. 17:00 Whip

Még a PHP 5-el frissítésként megjelent a PDO is, mely egy natív absztrakciós réteg a webfejlesztés során. Használatával egységes formában kezelhetünk többféle adatbázist, és jobb esetben minimális módosítással cserélhetjük ki az adatbázis kiszolgálót. Előnye, hogy a PHP része, illetve mivel C alapú, így elég gyors is. A PDO illesztkedik a PHP OOP irányú vonalához, szóval egy osztályként kapjuk kézhez.

Vegyük is gyorsan használatba

<?php

// Csatlakozási adatok

$tipus = 'mysql';
$host = 'localhost';
$database = 'adatbazis';
$username = 'felhasznalo';
$password = '12345';

// Csatlakozás

try

{
  $db = new PDO("$tipus:host=$host;dbname=$database", $username, $password);
  echo 'Sikerült a csatlakozás';
}
catch(PDOException $e)
{
   echo 'Hiba: '.$e->getMessage();
}
?>

A példában egy MySQL adatbázishoz csatlakoztam. Bármilyen probléma esetén PDOException -t fogunk kapni.

A következő példákban a kódba már nem írom bele a csatlakozást, hanem feltételezem, hogy van egy élő kapcsolatod.

Az egyik nagy előnye a PDO-nak, hogy képes a parancsokba behelyettesíteni paramétereket úgy, hogy az adatok escapelését is elvégzi. Ennek az SQL injection miatt van szerepe, ahol olyan adatot küldhetnek be amit megfelelő előszűrés nélkül SQL parancsnak értelmezhet a rendszer. Node nézzük is, hogy miként is megy ez:

        $sth = $db->prepare('UPDATE post SET title = ":title" WHERE id=:id');
        $sth->execute(array(':title' => 'Első bejegyzés', ':id' => 1));
        $sth->execute(array(':title' => 'Második bejegyzés', ':id' => 2));
        $sth->execute(array(':title' => 'Harmadik bejegyzés', ':id' => 3));

Mint látható "beállítottunk előre egy parancsot" melyet az $sth változóban eltároltunk, és későbbiekben bárhányszor meghívhatunk megfelelően paraméterezve. A paraméter konkrétan egy tömb, ahol kulcs-érték párokkal jelezzük, hogy minek a helyére mit helyettesítsen be a rendszer. Ilyen egyszerű az első három bejegyzésnek egyéni címet adni.

Tranzakció létrehozása sem túl bonyolult. A tranzakciók lényege, hogy vagy a tranzakciós blokkon belüli összes parancs lefut, vagy egyik sem. Rendkívül jól használható fícsör lehet például fizetések eltárolásánál.

$db->beginTransaction();

     $sth->execute(array(':title' => 'Első bejegyzés', ':id' => 1));
     $sth->execute(array(':title' => 'Második bejegyzés', ':id' => 2));

$db->commit();

 A $db->rollBack(); parancs kiadásával pedig megszakíthatjuk a tranzakciót.

Lépjünk is szintet, jöhetnek a lekérdezések:

    $sth = $db->prepare('SELECT * FROM post WHERE id>:id');
    $sth->execute(array(':id' => 1));
    $posts = $sth->fetchAll();

A fenti kód a $posts változóba visszaadja fetchelve az összes sort aminek az ID-je nagyobb mint 1. A $posts[0] -ban az első sor a $posts[1]-ben a második stb lesz. Emiatt egy foreach segítségével könnyen listázhatóak a találatok.

Ha konkrétan az 1-es ID-jűt szeretnéd kiíratni akkor értelemszerűen a id>:id cserélődik id=:id-re, és mivel ott csak 1 visszaadott sor lesz ezért a $posts[0]['title'] segítségével rögtön íratható is a bejegyzés címe.

Ha valamilyen hibába futnál akkor:

var_dump($db->errorInfo());

Szólj hozzá!

Címkék: php adatbázis mysql pdo

A bejegyzés trackback címe:

https://webkuvik.blog.hu/api/trackback/id/tr933478603

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása