Korzystanie z SQLite

SQLite

Wstęp

W php 4 standardem obsługi baz danych SQL był MySQL. Jego zaletą był z pewnością fakt, że bez problemu można znaleźć serwer z MySQL'em, oraz dużo dobrego oprogramowania napisanego w PHP + MySQL (np. dobrodziejstwo jakim jest phpMyAdmin).

W php 5 wprowadzono jako standard, mieszczące się w jednej bibliotece (nie wymagające żadnego dodatkowego oprogramowania, tak jak ma to miejsce w przypadku innych baz danych) rozszerzenie nazwane SQLite. Pod względem możliwości SQLite przewyższa MySQL'a. Jeżeli chodzi o szybkość działania, idą one łeb w łeb. Pod względem bezpieczeństwa, niestety SQLite ustępuje swojemu starszemu bratu.

Instalacja

I tu miła niespodzianka ? jeśli używasz php w wersji 5 lub nowszej SQLite jest już zainstalowany!

Przechowywanie baz danych

Istotą SQLite'a jest to że swoje bazy danych przechowuje w niezaszyfrowanych plikach tekstowych. Nie jest to zbyt bezpieczne, ale za to przyszpiesza rozwój aplikacji. Z tego powodu nie należy udostępniać baz danych nigdzie i nikomu - należy przechowywać je jedynie w miejscu, do którego dostęp ma aplikacja (i ewentualnie administrator).

Jeśli jednak koniecznie chcemy udostępnić komuś całą bazę, należy je zabezpieczyć tak jak zwykłe pliki tekstowe. To znaczy, albo zabezpieczyć je kryptologicznie bezpieczną metodą, albo ograniczyć dostęp do nich z poziomu serwera (Jeśli korzystamy z Apache, możnaby do tego użyć .htaccess).

Komunikacja z bazą danych

Bazę danych otwiera się poleceniem:

$db = sqlite_open('nazwa.sqlite'); //nazwa.sqlite to nazwa pliku z bazą danych

Dialekt SQLite (tzn język z rodziny SQL) ma pewne różnice w odniesieniu do innych dialektów MySql lub PostgreSQL, ale z uwagi na to że wszystkie są z rodziny SQL, wyglądają dosyć podobnie.

$resource = sqlite_query($db, "zapytanie"); //proszę zwrócić uwagę na parametr $db

Funkcja sqlite_num_rows() pozwala zwrócić ilość zwróconych wyników.

$count = sqlite_num_rows($resource);

Jest wiele sposobów odczytania wyników, jednym z nich jest sqlite_fetch_array() z parametrem SQLITE_ASSOC, który zwraca wynik żądania jako tablica asocjacyjna.

$row = sqlite_fetch_array($resource, SQLITE_ASSOC);

Drugi parametr polecenia ustala sposób w jaki będzie można odwoływać się do pól tablicy (w mysql'u służyły do tego polecenia mysql_fetch_row() i mysql_fetch_array()).

  • SQLITE_ASSOC - Zwraca zasób jako tablica asocjacyjna, gdzie kluczami są nazwy pól. Z tym parametrem, do pól będzie się można odwoływać przez ich nazwy $row['nazwa'].
  • SQLITE_NUM - Zwraca zasób jako tablica sekwencyjna, gdzie kluczami są kolejne liczby porządkowe. Do pól można się odnieść $row[1].
  • SQLITE_BOTH - Zwraca zasób ze zduplikowanymi wartościami, gdzie każda wartość znajduje się zarówno pod kluczem który jest nazwą pola, jak i liczbą porządkową.

Dialekt SQLite

Tworzenie tabeli:

CREATE TABLE tablica (
      id INTEGER PRIMARY KEY,
      pole1 VARCHAR(32),
      pole2 FLOAT
 );

CREATE TABLE tablica (
      id INTEGER PRIMARY KEY,
      pole1,
      pole2
 );

Oba zapisy są prawidłowe, nie trzeba nadawać polom typów, zostaną one zdefiniowane automatycznie. INTEGER PRIMARY KEY to dopowiednik AUTO_INCREMENT z MySQL'a, i oznacza to że kolumna jest kluczem głównym. Jeśli dodamy kolejne rekordy, ta wartość będzie automatycznie zwiększana o 1. Więcej o typach danych na http://sqlite.org/datatypes.html.

Czy warto używać SQLite'a?

SQLite to nie okrojona wersja MySQL'a! SQLite to również triggersy, zapytania zagnieżdżone, możliwość tworzenia własnych funkcji. Jak większość rozwiązań w IT, SQLite ma swoje wady i zalety.

Zalety:

  • Dostęp do bazy danych bez żadnego sterownika, lub uruchomionego procesu. Na niektórych serwerach nie mamy możliwości uruchomienia instancji serwera MySQL, więc pliki to nasz jedyny sposób zapisu danych. Wtedy, możemy posłużyć się SQLite, żeby korzystać z dobrodziejstw baz danych, zamiast operować na plikach.
  • Tworzenie kopii zapasowych sprowadza się do skopiowania pliku
  • Można zacząć korzystać z SQLite bez żadnego przygotowania środowiska developerskiego.

Wady:

  • Zmniejszone bezpieczeństwo, nie ma użytkowników, haseł, poziomów dostępów
  • Jeśli plik zostanie udostępniony przez serwer, wszystkie nasze dane staną się publiczne
  • Każdy kto ma dostęp do plików (czyli inni użytkownicy, czy nawet inne aplikacje, np w Python, Javie, etc.) mogą ją edytować. Podobnie jest jednak z bazami MySql i Postgres, jednak tutaj zabezpieczeniem są poziomy dostępu i użytkownicy (tzn sam dostęp do bazy danych nie sprawi że możemy ją edytować, musimy mieć szczególne uprawnienia. W SQLite sam dostęp do pliku jest wystarczający).
SQL

2 komentarzy

niezaszyfrowanych plikach tekstowych.
Tekstowych?

szkoda tylko że nie jest to napisane o profesjonalnej bazie danych: InterBase, FireBird, PostgreSQL, Oracle czy MS SQL....