SQLite, czyli lekka recepta na bazę danych

Data dodania:
08 września 09
Autor:
Łukasz Rutkowski
Kategoria:
Bazy danych, PHP

sqliteTworząc proste strony, ze względu na łatwość ich edycji, praktycznie zawsze korzystamy z bazy danych. Zazwyczaj wybieramy do tego MySQL, który kiedyś uchodził za tego najlżejszego i nie mającego zbyt wielu zaawansowanych funkcji. Jednak dzisiaj, ten system bazodanowy nie jest już taki prosty, jak się dużej części programistów wydaje i mimo lżejszych alternatyw nadal go wykorzystują do praktycznie statycznych stron, które są np. wizytówkami firm. Jest to wielkim błędem, gdyż można to zrobić dużo prościej, odciążając przy tym serwer oraz zmniejszając czas, który skrypt traci na nawiązanie połączenia z bazą danych.

Lekka alternatywa? SQLite

Chciałbym dzisiaj wspomnieć o SQLite, o którym pewnie prawie każdy słyszał. Mimo tego, nadal mała ilość programistów z niego korzysta. Podejrzewam, że to ze względu na dużą ilość artykułów opartych na bibliotece “MySQL”(często są to dość stare artykuły; polecam zapoznać się z moim), ale cóż – nic z tym raczej nie zrobimy, więc pozostaje Nam być bogatszymi o taką wiedzę i samemu uczyć się rzeczy nowszych, zazwyczaj lepszych i łatwiejszych. Baza jest przechowywana pod postacią pliku, który można bez problemu przenieść na inny serwer, więc mamy tutaj kolejny plus – bez zbędnej zabawy możemy szybko przenieść Naszą aplikację na inny serwer.
Nie jesteś przekonany co do tego silnika i szukasz przykładu jego zastosowania? Biblioteki Piotra Malińskiego właśnie na nim się opierają. Z tego, co wyczytałem, któraś z jego stron opartych na SQLite przeżyła nawet Wykop Effect, więc na prawdę nie jest to złe, a wręcz bardzo dobre rozwiązanie.

Obsługa w PHP

Niestety klasa dedykowana do obsługi SQLite często nie jest w najnowszej wersji, przez co możemy mieć problem z jej wczytaniem, jeżeli będziemy ją edytować poprzez edytory graficzne(np. SQLite Manager - wtyczka dla Firefoksa, polecam). Na szczęście istnieje taki piękny wytwór człowieka, jakim jest PDO, który bez problemu łączy się z takimi bazami. Z drugiej strony to, że musimy użyć PDO jest pewnego rodzaju plusem – jeżeli Nam się nie spodoba SQLite, eksportując bazę z niego do postaci kodu SQL, możemy w minutę przenieść aplikację na inny silnik bazodanowy.

Korzystanie

Skoro już poznaliśmy, czym w ogóle jest SQLite, przydałoby się poznać sposób, jak z niego skorzystać w Naszych projektach. Pokażę to na najprostszym przykładzie, a mianowicie pobraniu z jednej tabeli rekordu o ID równym 1.
W poniższym kodzie obiekt PDO zawsze będzie się krył pod zmienną $db, a obiekt zapytania – $query.

Połączenie

Aby się połączyć z Naszym plikiem, z bazą, wystarczy użyć poniższej linijki:

$db = new PDO('sqlite:app.sqlite');

Gdzie app.sqlite to adres pliku.
Ciekawostka! Można stworzyć wirtualną bazę w pamięci, która zostanie usunięta po zakończeniu skryptu. Wystarczy jako argument podczas tworzenia obiektu PDO podać:

sqlite::memory:

Wykonanie zapytania

To można wykonać na dwa sposoby: standardowo za pomocą metody query, z którym nie powinieneś mieć już problemów i prepare, który nie poddaje się atakowi typu SQL Injection(bez dodatkowej pracy oczywiście). Dla dodania powiem, że klasa MySQLi również obsługuje drugi sposób.

Metoda “query”

Jak już mówiłem, nie różni się to od każdej innej metody query zawartej w klasie do obsługi bazy danych, więc nie będę tutaj nic dodawał, oprócz kodu oczywiście:

$db->query('SELECT * FROM articles WHERE id=1');

Metoda “prepare”

To również nie jest nic skomplikowanego, chociaż potrzeba więcej zapisać. Opiszę ją tutaj, gdyż wiem, że mało kto ją zna. Sama inicjacja jest krótka i przyjemna:

$query = $db->prepare('SELECT * FROM articles WHERE id=:id');

Możemy tutaj zaobserwować ciąg :id, dzięki któremu będziemy mogli w danym miejscu umieścić poszukiwany przez Nas ID. Ciąg taki zawsze rozpoczynamy od dwukropka, a potem wpisujemy wybraną przez siebie nazwę. Wartość podstawiamy za pomocą metody bindParam wg poniższego sposobu:

$id = '1';
$query->bindParam(':id', $id, PDO::PARAM_INT);

Odnajdziemy tutaj coś takiego, jak PDO::PARAM_INT, co jest stałą z klasy PDO. Określa ona typ argumentu, jaki przekazujemy do zapytania, aby zabezpieczyć się przed przypadkiem, kiedy ktoś zamiast np. liczby podstawi Nam ciąg znaków. Resztę takich stałych można znaleźć na liście w Manualu.
Kolejnym krokiem jest wykonanie zapytania:

$query->execute();

A na koniec pobranie jego wyniku. Tutaj ciekawostka – PDO udostępnia Nam metodę fetchAll, która od razu zwraca w jednej tablicy wszystkie rekordy zwrócone przez bazę danych.

$rows = $query->fetchAll();

Dla wizualizacji wyniku możemy sobie wyświetlić Naszą tablicę:

print_r($rows);

Podsumowanie

Jak widać, SQLite jest zwykłą, prostą i lekką bazą danych, której użycie jest szczerze mówiąc praktycznie takie same, jak wszystkich innych, popularnych. Obsługę tego silnika znajdziecie na każdym serwerze, który ma zainstalowany PHP w najnowszej wersji. Pozostaje mi jeszcze raz polecić Ci tę bazę danych, gdyż na prawdę w małych projektach jest niezastąpiona.

~Łukasz Rutkowski