RkBlog

Hardware, programming and astronomy tutorials and reviews.

PDO - uniwersalny interfejs baz danych

PDO to interfejs do różnych baz danych takich jak MySQL, PostgreSQL, Oracle czy SQLite. Za pomocą tego samego interfejsu możemy korzystać z różnych baz danych. Dość dobry opis PDO znajdziemy w dokumentacji na php.net oraz w sieci. PDO dostępne jest w PHP od wersji 5.1.0 lub też dla wszystkich wersji 5.* za pomocą rozszerzenia z PECL.
Kolosalną przewagą PDO nad ADOdb czy PEAR:DB jest fakt iż jest to binarne rozszerzenie a nie skrypt PHP przez co szybkość i skalowalność PDO są znacznie większe niż w przypadku rozwiązań opierających się na kodzie PHP.
Prosty przykład wykorzystania PDO:
<?php

try {
   $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
   foreach ($dbh->query('SELECT * FROM tabela') as $row)
     {
     print_r($row);
     }
   $dbh = null;
} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}
Zaczynamy od stworzenia obiektu klasy PDO:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=NAZWA_BAZY', LOGIN, HASŁO); // mysql
$dbh = new PDO('sqlite:/ścieżka/baza.db'); // SQLite
$dbh = new PDO("pgsql:host=localhost port=5432 dbname=NAZWA_BAZY user=LOGIN password=HASŁO") // postgresql
$dbh = new PDO("firebird:User=LOGIN;Password=HASŁO;Database=NAZWA_BAZY;DataSource=localhost;Port=3050") // firebird
podający typ bazy danych, nazwę bazy oraz login i hasło użytkownika. Następnie wykonujemy zapytanie $dbh->query, które zwraca wynik w postaci obiektu zawierającego tablice z danymi, przez który można iterować. Metody PDO takie jak "query" nie zwracają domyślnie true/false. Do obsługi błędów wykorzystywane są wyjątki (try, catch).

PDO pozwala również wykonywać "przygotowane" zapytania. W przypadku seryjnego dodawania danych do tej samej tabeli przygotowane zapytania znacznie przyśpieszają tą operację, dodatkowo przygotowane zapytania mogą mieć przypisane typy dla wszystkich zmiennych w zapytaniu, z dokumentacji:
<?php

$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); // INT - zmienna liczbowa
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); // STR - łańcuch
$sth->execute();
RkBlog

Podstawy PHP, 14 July 2008, Piotr Maliński

Comment article