PDO – PHP Data Objects – łatwe początki

 

Od wersji PHP 5.5.0 tworzenie nowego kodu wykorzystującego komputerek_php rozszerzenie Mysql nie jest zalecane. Co więcej rozszerzenie to uzyskało status „deprecated” i (prawdopodobnie) zgodnie z zapowiedzią w dalekiej nieoznaczonej przyszłości zostanie usunięte. Jeśli w dalszym ciągu komputerek_mysql korzystasz z funkcji takich jak mysql_connect i mysql_query to chyba najwyższy czas abyś zaczął korzystać z biblioteki PDO. Od wersji PHP 5.1 jest ona nowym integralnym interfejsem przeznaczonym do obsługi komunikacji z bazą danych. Specjalnie nie piszę z jakiego typu bazą danych gdyż jedną z wielkich zalet tego interfejsu jest jego uniwersalność. PDO daje możliwość podłączenia się z praktycznie każdą popularną bazą danych obecną na naszym rynku, warto wspomnieć choćby o takich bazach danych jak: MySQL, MS SQL, Oracle, PostgreSQL, SQLite.

Rozwinięcie skrótu PDO, czyli PHP Data Objects, od razu sugeruje nam (zgodnie z prawdą), że interfejs ten jest w pełni OOP. Połączenie z bazą definiowane jest już na etapie tworzenia obiektu klasy PDO. Przykładowy kod prezentujący taką akcję znajdziecie poniżej:

define("DBHOST", "nazwa.hosta.pl");
define("DBNAME", "nazwa_bazy");
define("USER", "nazwa_uzytkownika");
define("PASS", "haslo_uzytkownika");

try {
$dsn = "mysql:host=" . DBHOST . "; dbname=".DBNAME ;
$pdo = new PDO($dsn,USER,PASS);
} catch (PDOException $e) {
print $komunikat;
}

Oczywiście nie musicie trzymać się takiej konwencji. Jeśli nie chcecie korzystać ze stałych, nic nie stoi na przeszkodzie by zamienić je na zmienne. Warto zwrócic uwagę na pierwszy paramtr $dsn. W zmiennej tej zawarty jest skrót nazwy bazy danych (DSN – Data Source Name) wykorzystanej jako źródło danych. W zależności od typu bazy danych wykorzystywany jest odpowiedni sterownik niezbędny do wykonania połączenia z dana bazą. Przykładowe skróty DSN popularnych baz danych znajdziecie poniżej:

sqlsrv – MS SQL, Azure
pgsql – PostgreSQL
mysql – MySQL
oci – Oracle
sqlite – SQLite

Ważne jest przechwycenie wyjątku przy podłączeniu, gdyż domyślny komunikat o błędzie wygenerowany przez PHP ujawni nazwę użytkownika oraz nazwę bazy, co nie jest zbyt pożądanym rozwiązaniem. Warto by w takich wypadkach pojawiał się zdefiniowany przez nas własny komunikat.

Wykonywanie zapytań PDO.

Wykonanie zapytań SQL jest bardzo proste i wymaga jedynie wywołania odpowiedniej metody utworzonego obiektu PDO. Poniższy kod prezentuje pobranie danych z tabeli:

$usersRes = $pdo->query('SELECT * FROM `user`');
$usersCount = $usersRes->rowCount();
$users = $usersRes->fetchAll(PDO::FETCH_ASSOC);

Wykonanie metody query spowoduje utworzenie nowego obiektu klasy PDOStatement. W powyższym przykładzie wykorzystano dwie metody z tej klasy: rowCount(), oraz fetchAll(). Pierwszy z nich pozwala uzyskać liczbę wierszy zwróconych przez zapytanie (w przypadku zapytań typu INSERT, UPDATE, DELETE metoda ta zwróci liczbę wierszy objętych modyfikacją). Uwaga metoda rowCount może nie działać w przypadku niektórych baz danych.

Metoda fetchAll($fetch_style) zwraca tablicę z wynikami. Domyślny argumentem $fetch_style tej metody jest FETCH_BOTH, co powoduje, że zwracana tablica zawiera dane w postaci asocjacyjnej (indeksy odpowiadają nazwom pól tabeli) oraz liczbowej (liczby odpowiadające kolejności pól tabeli z zapytania). PDO::FETCH_ASSOC – pozwala ograniczyć zwracaną tablicę jedynie do stylu asocjacyjnego. Więcej informacji na temat różnych sposobów zwracania wyników znajdziecie na tej stronie: http://php.net/manual/en/pdostatement.fetch.php

Myślę, że te informacje będą wystarczające na dobry początek. Gorąco zachęcam do stosowania PDO. Szczególnie w przypadku gdy tworzony lub rozwijany projekt ma się cechować uniwersalnością i elastycznością w obsłudze różnego rodzaju baz danych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


2 + jeden =

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>