RkBlog

Hardware, programming and astronomy tutorials and reviews.

PDO - uniwersalny interfejs baz danych

Opis jednolitego interfejsu do różnych 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

14 July 2008;

Comment article