Skip navigation

A csatlakozás menete PDO-val

A PDO osztály

A PDO (PHP Data Object) osztály a PHP-be beépített adatbáziskezelő osztálykönyvtár, melynek segítségével biztonságos, objektumorientált módon kezelhetjük az adatbázisainkat a PHP-n belül. Minden adatbáziskezelő rendszerhez más-más PDO driver tartozik. A megfelelő driver kiválasztása a konstrultorban történik (lásd alább a csatlakozásnál).

A PDO osztálykönyvtárat a legtöbb esetben engedélyezni kell. Ennek módját itt nem tárgyaljuk, helyette javasoljuk az aktuális, hivalatos dokumentáció áttekintését.

Adatbázis csatlakozás PDO-val

Az adatbázis csatlakozás a PDO osztállyal az alábbi minta alapján történik. A csatlakozás egy új PDO objektum létrehozásával történik. A konstruktorban meg kell adni az adatbázis szerver elérési útját, a felhasználó nevét, amivel az adatbázishoz csatlakozunk, illetve a felhasználó jelszavát. Ammenniyben sikerült csatlakozni, úgy létrejött egy PDO objektum a $conn változóban. Ha nem sikerült csatlakozni, akkor pedig egy kivétel keletkezik, amelyet a catch-blokkban kezelünk le. Most csak annyit írunk ki, hogy "Csatlakozási hiba: " és hozzáfűzzük a rendszer által létrehozott hibaüzenetet a PDOException::getMessage() függvényével.

<?php
$servername = "localhost";
$username = "root";
$password = "";

try {
  $conn = new PDO("mysql:host=$servername;dbname=pelda", $username, $password);  
} catch(PDOException $e) {
  echo "Csatlakozási hiba: " . $e->getMessage();
}
?>

SQL utasítások lefuttatása

Azokat az SQL utasításokat, főként a lekérdezésket, amelyek nem tartalmaznak külső paramétert, a PDO::query() függvénnyel lehet lefuttatni.

Ha az SQL utasítás külső értéket tartalmaz (például beszúrásnál, módosításnál, törlésénél, de néha lekérdezésnél is), akkor az utasítást elő kell készíteni. 

  1. Készítsük elő az SQL utasítást és hozzunk létre egy PDOStatement objektumot a PDO::prepare() metódussal.
  2. Kössük be a külső paramétereket a PDOStatement::bindParam() metódussal.
  3. Futtassuk le az utasítást!
    1. Beszúró, módosító és törlő utasításoknál futtassuk le az utasítást a PDOStatement::execute() metódussal!
    2. Lekérdezésnél kössük változókhoz az eredménytábla oszlopait a PDOStatement::bindValue() metódussal, és ezután futtassuk le az utasítást a PDOStatement::execute() metódussal!

Lekérdezés eredményeinek lekérése

Ha a lekérdezést  lefuttattuk, akkor az eredménytáblán egy kurzorral megyünk végig. A kurzor mindig csak az aktuális sort olvassa be az eredményhalmazból és az ott tárolt mezőket vagy egy megadott változóban, vagy pedig a PDOStatement::bindValue() metódussal hozzárendelt "kimeneti" változókba tárolja. Külső érték nélküli lekérdezés esetén a PDO::query() eredményét asszociatív tömbben vizsgálhatjuk. Ha a PDOStatement-tel futtatuk a lekérdezést, a kurzort  a PDOStatement::fetch() metódussal léptetjük a következő sorra 

pelda1_pdo.php

<?php
echo '<h1>Első példa</h1>'; // főcím kiíratása
// csatlakozás az adatbázishoz
try {
   $conn = new PDO("mysql:host=localhost;dbname=pelda", "root", "");
} catch (PDOException $ex) {
   echo "Csatlakozási hiba: " . $ex->getMessage();
}


// lekérdezzük a városokat a "varosok" táblából

$sql = "SELECT id, varosnev, megye FROM varosok"; // ez csak egy string, még nem hajtódik végre

$res = $conn->query($sql); // az utasítás csak most fut le

// html táblázatként íratjuk ki;
echo '<table border=1>';
echo '<tr>'; // táblázat fejléce
echo '<th>ID</th>';
echo '<th>Városnév</th>';
echo '<th>Megye</th>';
echo '</tr>';

// a táblázat sorai
foreach ( $res as $current_row) { // most asszociatív tömbként kezeljük a sorokat
   echo '<tr>';
   echo '<td>' . $current_row["id"] . '</td>';
   echo '<td>' . $current_row["varosnev"] . '</td>';
   echo '<td>' . $current_row["megye"] . '</td>';
   echo '</tr>';
}
echo '</table>';

$conn = null; // lezárjuk az adatbázis-kapcsolatot

?>

Adatbázis export és forráskód

Az adatbázis létrehozását nem tartalmazza az SQL fájl, ezért azt külön létre kell hozni.

A forráskód tömörítve van, mert különben a böngészők letöltés helyett megpróbálnák értelmezni.