Kurs PDO

Rozszerzenie PDO - PHP Data Objects jest zbiorem metod, dzięki którym obsługa bazy danych staje się przejrzystsza, szybsza i przede wszystkim bezpieczniejsza. Zachęcam do korzystania właśnie z PDO, a nie przestarzałych funkcji mysql_*. Niniejszy kurs, a raczej wprowadzenie do PDO ma na celu zapoznanie z tym interfejsem.

Wprowadzenie

Główną zaletą PDO jest szybkość oraz niezależność od używanego systemu bazy danych. W praktyce oznacza to, że jeśli w aplikacji zachodzi potrzeba zmiany systemu bazy danych np. z MySQL na PostgreSQL należy zmienić tylko prefix DSN z mysql na pgsql i oczywiście dane dostępowe, jeśli jest taka konieczność.

Jakie systemy baz danych są wspierane przez PDO?
Lista sterowników znajduje się pod tym adresem: http://www.php.net/manual/en/pdo.drivers.php

PDO połączenie

Jeśli programista do tej pory korzystał z funkcji PHP do obsługi MySQL, połączenie z bazą przy użyciu PDO może wydać się nieco dziwne, ponieważ sprowadza się do utworzenia instancji klasy PDO i podania konstruktorowi parametrów takich jak DSN, nazwa użytkownika i hasło.

Przykład:

$handler = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

Czym jest DSN?
DSN - Data Source Name, czyli nazwa źródła danych. Ciąg znaków podawany jako pierwszy parametr dla konstruktora klasy PDO.
Np. 'mysql:host=localhost;dbname=test'

Jak widać na powyższym przykładzie już samo połączenie z bazą danych jest dużym plusem, ponieważ sprowadza się do napisania jednej lini kodu. Wystarczy przypomnieć sobie łączenie i wybieranie bazy przy użyciu standardowych funkcji PHP do obsługi MySQL, aby dostrzec zalety PDO względem funkcji mysql_*

PDO::query, czyli wykonujemy zapytanie do bazy

Najprostszym sposobem do wyciągnięcia z bazy potrzebnych danych jest metoda PDO::query, która wykonuje podane jako parametr zapytanie i zwraca wynik jako obiekt PDOStatement.

Składnia

$dbh->query('SELECT id, name FROM users');

, gdzie $dbh to handler połączenia. Jeśli zapytanie jest poprawne, metoda PDO::query zwróci obiekt PDOStatement z danymi, które możemy wyświetlić bezpośrednio w pętli, np.

foreach($dbh->query('SELECT id, name FROM users') as $user)

{

 echo $user['name'] . "\t";

}

PDO::prepare - preparowanie zapytania

Metoda PDO::prepare służy do preparowana instrukcji podanej jako jej parametr. Preparowane instrukcje zapobiegają atakom SQL injection, a to dzięki używaniu w instrukcji zmiennych, które reprezentują zbindowane wartości. Nie trzeba się więc martwić, że do zapytania wstrzyknięty zostanie np. jakiś złośliwy cudzysłów, ponieważ metody bindowania, które oferuje PDO, oczyszczą podawane dane. Metoda zwróci obiekt PDOStatement, jeśli zapytanie zostanie wykonane poprawnie lub FALSE, jeśli serwer nie odpowie. Gdy jednak zapytanie będzie niepoprawne, zwrócony zostanie wyjątek PDOException.

Składnia

$statement = $dbh->prepare('SELECT name FROM users WHERE id = :id LIMIT 1');

Teraz zbindujemy ziemnną $user_id przy użyciu metody PDO::bindParam, o której w dalszej części kursu.
$statement->bindParam(':id', $user_id, PDO::PARAM_INT);
Bindujemy zmienną dla typu int, jeśli podana wartość nie będzie typu int, PDO wyrzuci wyjątek, o którym wspomniałem wyżej. Tak spreparowane zapytanie można następnie wykonać przy użyciu metody PDOStatement::execute.

Przykład:

$statement = $dbh->prepare('SELECT name FROM users WHERE id = :id LIMIT 1');

$statement->bindParam(':id', $user_id, PDO::PARAM_INT);

$statement->execute();

PDOStatement::execute - wykonanie spreparowanej instrukcji

Metoda PDOStatement::execute wykonuje spreparowaną instrukcję - patrz przykład wyżej. Metoda zwraca TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia.

PDOStatement::bindParam - bindowanie parametru do podanej nazwy

Metoda PDOStatement::bindParam binduje parametr do podanej nazwy zmiennej. Metoda ta przyjmuje 5 argumentów, w tym 2 wymagane. Wymaganymi argumentami są parameter - identyfikator parametru oraz variable - zmienna do z bindowania. Trzeci argument to stała reprezentujaca typ przekazywanych danych. Dla typu string będzie to PDO::PARAM_STR, a dla typu int będzie to PDO::PARAM_INT. Takich stałych reprezentujących typ danych jest dużo więcej, pełna lista znajduje się w dokumentacji. Pozostałe dwa argumenty są mniej istotne, dlatego je pominę na tym etapie.

PDOStatement::bindValue - bindowanie wartości

Metoda PDOStatement::bindValue działa podobnie jak metoda PDOStatement::bindParam z taką różnicą, że bindować można zarówno zmienną jak i wartość. Metoda przyjmuje tylko 3 argumenty, w tym 2 wymagane. Są to te same argumenty, które przyjmuje metoda PDOStatement::bindParam.

Komentarze

Popular

[HTML] Jak wstawić obrazek?

[PHP|HTML] Odświeżenie strony

[HTML] Jak wycentrować stronę?