Ez a modul csak a PHP 5 verziótól él. A nyelvben a kiterjesztés alapértelmezés szerint engedélyezett. A kiterjesztés egy alapvetően egyszerű és könnyen használható eszköz, hogy az XML dokumentumokat objektumokká konvertáljuk, és mint objektumokon tudjunk műveleteket végezni rajtuk.
Az XML dokumentumokat többféle forrásból tudjuk feldolgozni: string, file.
Természetesen az objektumstruktúra nem csak olvasható írható is. Így lehetőség nyílik XML dokumentumok módosítására is.
DOM – Document Object Modell. Egy szabvány az XML dokumentstruktúrák kezelésére. A PHP5 nyelv része a DOM teljes és szabványos támogatása, ezzel együtt szeretnék lecserélni a PHP4 ben élő DOM XML kiterjesztést.
SOAP – Simple Object Access Protocol. A webszolgáltatások egyik meghatározó protokollja, mely XML formátumban szállít adatokat elosztott alkalmazások között http alapokon. Meghatározza az XML formáját, a feldolgozás módját. Az adatokat (akár tömböket és objektumokat is) átalakítja szállítható XML formátumra, majd a másik oldalon az XML-ben szállított szabályok alapján újra összerakja az adatot.
A kiterjesztés nagyrészt lefedi a SOAP1.1, SOAP1.2 és a WSDL1.1 specifikációkat.
A MySQL kiterjesztés az évek során túl bonyolult és átláthatatlan lett, valamint igencsak lemaradt a MySQL adatbázisszerverek képességeinek kiaknázásában. Ezért a PHP5-ben bemutatkozik a MySQLi modul, egy teljesen újraírt felület az adatbázisszerverhez, mely tartalmaz procedurális és objektumorientált interfészt is, ugyanakkor egy-két funkciót nem találunk a régihez képest, vagy azért mert biztonsági aggályokat vet fel a használatuk, vagy mert hatékonysági szempontból teljesen hasztalannak bizonyulnak. Nem teljesen kompatibilis a régivel, de igencsak ajánlott ezt az új modult használni, mellesleg alapértelmezésben a nyelv része.
Az új kiterjesztés végre elérhetővé teszi az MySQL C könyvtár által kínált funkciókat. Többek között kiegészítő támogatást nyújt nyomkövetéshez, hibakereséshez, terheléselosztáshoz valamint többszörözéshez.
A procedurális interfész:
i | mindenféle szám típus |
d | double vagy float típus |
b | Blob |
s | minden más típus |
A PDO (PHP Data Objects) a MySQLi-vel együtt a PHP5-ben került be a PHP-s világba. Ugyan úgy használható MySQL adatbázishoz való kapcsolódáshoz, ugyanakkor a MySQLi-vel ellentétben a PDO még számos egyéb driverrel is rendelkezik. Ezek közül a legismertebbek a PostgreSQL, Oracle, MS SQL, SQLite.
Itt már nem tartották meg a procedurális függvényhívási lehetőségeket, kizárólag az OOP-s formában használható, cserébe az ezzel készített PHP-s rendszerek mögött könnyedén cserélhető az adatbázis rendszer.
A rugalmasságnak viszont ára van, egyes mérések szerint ha nem használunk prepared statementeket, akkor 2.5%, ha használunk akkor pedig 6.7%-os sebesség veszteséggel számolhatunk a MySQLi-vel szemben.
Bár ez a szám soknak tűnhet, bizonyos esetekben ennél többet lehet nyerni magán az adatbáziskezelő rendszeren.
PDO esetén egy kapcsolódás az adatbázishoz a következőképpen adható meg:
Az első paraméter az úgynevezett "connection string", mint látható itt a "mysql" rész jelzi, hogy épp egy MySQL adatbázishoz próbálunk kapcsolódni, benne van még a hosztnév és az adatbázis név.
Kicsit részletesebben erről az alábbi wikipedia cikkben található információ: http://en.wikipedia.org/wiki/Connection_string
A másik két paraméter a kapcsolódáshoz használt felhasználó név és a jelszó.
A különböző hibák PDO esetén egy PDOException-t váltanak ki, ezeket el tudjuk kapni.
A különböző adatbázis műveletekhez a MySQLi-hez hasonlóan célszerű a prepared statementeket használni. Itt a paraméter kötést kétféleképpen is megadhatjuk, vagy nevesítve, vagy név nélkül, az üres helyekre kérdőjeleket téve.
Nevesített megoldás:
Mint látható, előbb elkezdünk egy lekérdezést előkészíteni, majd a :name és :value párokat cseréljük változókra és végül futtatjuk a lekérdezést.
Név nélküli megoldás:
Ennél a megoldásnál szintén elkezdünk egy kérést készíteni, majd megadjuk benne a kötendő paramétereket. Ezekhez a paraméterekhez a bindParam utasítással kötjük hozzá a változókat, majd futtatjuk a lekérdezést.
Magukat a paramétereket a bindParam helyett akár az execute() függvénynek is paraméterül adhattuk volna, például a következő módon:
Ez természetesen kulcs-érték párok formájában is működik, a nevesített paraméterekkel.
Egy lekérdezés eredményét szintén a készített statement-ből lehet visszanyerni a fetchAll() függvénnyel tömbös formában, vagy a fetch() hívogatásával soronként egy ciklusban.
Amennyiben csak egy egyszerű lekérdezést szeretnénk végrehajtani, akkor az exec() parancsot is használhatjuk közvetlenül a PDO objektumon.
Van lehetőség tranzakciók használatára is, de fontos odafigyelni, hogy ezeknek a lehetőségét csak driver szinten ellenőrzi a rendszer és tér vissza igaz vagy hamis értékkel. Azaz, ha egy MyISAM-os táblán próbálunk tranzakciókat végrehajtani, akkor nem fog hibát jelezni, de mégsem fogunk tudni rollback-e visszapörgetni semmit!
Nagyméretű (>4kb) tárolt adatok, például képek esetén hasznos lehet, ha azokhoz egy stream formájában férünk hozzá és nem közvetlenül változókba pakoljuk. A PDO erre is nyújt egy lehetőséget a visszatérési értékek egy speciális kötésével.
A fenti példakód bemutatja, hogy miként lehet a visszatérési értékeket kötni változókhoz.
A $lob változó fogja tárolni a stram formájában érkező adatokat, majd itt az fpassthru segítségével tovább is adja a böngészőnek.
Bár a lehetőség maga adaott, nem szokás ilyen formában nagyobb mennyiségű adatot az adatbázis kezelőbe tölteni. Célszerűbb a feltöltés után a szervern található elérhetőségét rögzíteni csak.