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 z przestarzałych funkcji mysql_*. Niniejszy kurs, a raczej wprowadzenie do PDO ma na celu zapoznanie Cię z tą biblioteką.

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 nazwę sterownia z mysql na pgsql i oczywiście dane dostępowe, jeśli jest taka konieczność.

Jakie systemy baz danych są wspierane? PDO wspiera następujące bazy danych:

  • MySQL 3.x/4.x/5.x
  • PostgreSQL
  • SQLite 3 and SQLite 2
  • IBM DB2
  • IBM Informix Dynamic Server
  • Cubrid
  • Oracle Call Interface
  • ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
  • FreeTDS / Microsoft SQL Server / Sybase
  • Firebird
  • Microsoft SQL Server / SQL Azure

PDO połączenie

Jeśli do tej pory korzystałeś/aś z funkcji mysql_* do obsługi bazy MySQL, połączenie przy użyciu PDO może wydać się nieco dziwne, ponieważ sprowadza się do utworzenia instancji klasy PDO i podania do konstruktora specjalnego ciągu DSN, nazwy użytkownika i hasła.
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 argument dla konstruktora klasy PDO. W ciągu tym zawarta jest nazwa sterownika, host oraz nazwa bazy danych. 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 mysql_*, aby już na początku dostrzec jedną z wielu zalet PDO.

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 argument 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?

[C++] Jak obliczyć pole i obwód trapezu?

[JavaScript|Node.js] Generowanie kodów QR w Node.js z użyciem biblioteki qrcode