Korzystanie z wbudowanego modułu SQLite w ServBay do programowania w PHP
ServBay to potężne lokalne środowisko rozwoju Web, zaprojektowane specjalnie dla programistów i obsługujące wiele stosów technologicznych. Wbudowany moduł bazy danych SQLite sprawia, że przechowywanie i zarządzanie danymi w aplikacjach PHP staje się wyjątkowo wygodne. W tym artykule znajdziesz szczegółowe informacje, jak wykorzystać tę funkcję w ServBay.
Przegląd modułu SQLite
SQLite to lekki, osadzony system zarządzania relacyjnymi bazami danych. W przeciwieństwie do tradycyjnych baz typu klient-serwer (np. MySQL, PostgreSQL), SQLite nie wymaga oddzielnego procesu serwera — jest wbudowany bezpośrednio w aplikację jako biblioteka. Cała baza danych przechowywana jest w jednym pliku, co znacząco upraszcza wdrożenie i zarządzanie.
Dzięki poniższym cechom, SQLite jest szeroko stosowany, zwłaszcza w aplikacjach małej i średniej skali, cache lokalnym, aplikacjach mobilnych oraz środowiskach rozwoju i testowania:
Najważniejsze cechy
- Lekkość: Mały rozmiar rdzennej biblioteki, minimalne zużycie zasobów.
- Zero konfiguracji: Nie wymaga instalacji, konfiguracji serwera ani zarządzania uprawnieniami użytkowników—gotowy do użycia od razu.
- Wysoka wydajność: Dla większości operacji odczytu i umiarkowanego zapisu SQLite zapewnia świetną wydajność.
- Pojedynczy plik: Cała baza danych mieści się w jednym pliku
.sqlite
, co ułatwia backup, migrację i zarządzanie. - Wsparcie transakcji ACID: Niezawodna obsługa transakcji gwarantuje spójność i integralność danych.
- Wieloplatformowość: Działa na wielu systemach i obsługuje różne języki programowania.
Wsparcie SQLite w ServBay
ServBay integruje kilka wersji PHP, a dla każdej z nich odpowiednie rozszerzenia SQLite (jak sqlite3
i pdo_sqlite
) są już wstępnie zainstalowane i domyślnie włączone. Oznacza to, że nie musisz ręcznie pobierać, kompilować ani konfigurować rozszerzeń PHP — możesz od razu używać funkcjonalności SQLite w swoim projekcie PHP.
Wymagania wstępne
- ServBay jest zainstalowany oraz uruchomiony na systemie macOS.
- Aktywowana i uruchomiona wybrana wersja PHP w ServBay.
- Masz katalog na pliki swojej strony — zalecane jest domyślne webroot ServBay:
/Applications/ServBay/www
lub jeden z jego podkatalogów.
Jak korzystać z SQLite w ServBay
Ponieważ moduł SQLite jest domyślnie aktywowany w ServBay, nie trzeba wykonywać żadnych dodatkowych kroków. Środowisko PHP jest gotowe do wywoływania funkcji i klas związanych z SQLite.
Jak sprawdzić, czy rozszerzenie SQLite jest aktywne:
Jeśli chcesz upewnić się, że rozszerzenie zostało poprawnie załadowane, sprawdź stronę wygenerowaną przez phpinfo()
:
- Utwórz plik PHP z zawartością
<?php phpinfo(); ?>
(np.info.php
). - Umieść go w katalogu swojej strony w ServBay, np.
/Applications/ServBay/www/servbay.demo/info.php
. - Otwórz ten plik w przeglądarce (np.
http://servbay.demo/info.php
). - Wyszukaj na stronie frazy "sqlite" lub "pdo_sqlite". Jeśli znajdziesz odpowiednią sekcję, oznacza to że rozszerzenie jest aktywne.
Użycie SQLite w kodzie PHP
Gdy już potwierdzisz dostępność rozszerzeń SQLite, możesz swobodnie korzystać z relevantnych API w aplikacji PHP. Do komunikacji z SQLite PHP oferuje kilka metod. Najpopularniejsze to klasa SQLite3
(obiektowa) oraz interfejs PDO
(PHP Data Objects).
Poniżej znajdziesz przykłady prostych operacji: połączenie, tworzenie tabeli, wstawianie i pobieranie danych, korzystając z obu metod. Zaleca się, by pliki PHP i utworzone w nich pliki .sqlite
umieścić w katalogu projektu, np. /Applications/ServBay/www/nazwa-twojego-projektu/
.
Przykład (metoda standardowa SQLite3)
Ta metoda wykorzystuje wbudowaną klasę SQLite3
, oferującą obiektowy interfejs do obsługi bazy SQLite.
php
<?php
// Ścieżka do pliku bazy danych
// Zalecane jest umieszczanie pliku bazy danych w podkatalogu "data" swojego projektu
$db_file = __DIR__ . '/data/servbay_demo.sqlite'; // __DIR__ wskazuje na katalog z tym skryptem
// Upewnij się, że katalog "data" istnieje
if (!is_dir(__DIR__ . '/data')) {
mkdir(__DIR__ . '/data', 0777, true);
}
// Połącz z bazą SQLite
// Jeśli plik nie istnieje, SQLite utworzy go automatycznie
try {
$db = new SQLite3($db_file);
echo "Pomyślnie połączono z bazą: " . $db_file . "\n";
} catch (Exception $e) {
die("Błąd połączenia z bazą danych: " . $e->getMessage());
}
// Tworzenie tabeli
// Użycie "IF NOT EXISTS" zapobiega błędom przy ponownym uruchomieniu
$create_table_sql = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
age INTEGER
)";
if ($db->exec($create_table_sql)) {
echo "Tabela 'users' utworzona lub już istnieje\n";
} else {
echo "Błąd tworzenia tabeli: " . $db->lastErrorMsg() . "\n";
}
// Wstawianie danych
$name = 'ServBay Demo User';
$email = '[email protected]';
$age = 30;
// Użycie zapytań przygotowanych dla lepszej ochrony przed SQL injection
$stmt = $db->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
$stmt->bindValue(':name', $name, SQLITE3_TEXT);
$stmt->bindValue(':email', $email, SQLITE3_TEXT);
$stmt->bindValue(':age', $age, SQLITE3_INTEGER);
// Wykonanie wstawienia; jeśli email już istnieje (klucz UNIQUE), operacja się nie powiedzie
if ($stmt->execute()) {
echo "Wstawiono dane: Name=" . $name . ", Email=" . $email . "\n";
} else {
// Sprawdzenie, czy to błąd związany z unikalnością
if (strpos($db->lastErrorMsg(), 'UNIQUE constraint failed') !== false) {
echo "Błąd wstawiania: Email '" . $email . "' już istnieje\n";
} else {
echo "Błąd wstawiania: " . $db->lastErrorMsg() . "\n";
}
}
$stmt->close(); // Zamknięcie zapytania przygotowanego
// Pobieranie danych
$search_name = 'ServBay Demo User';
$query_sql = "SELECT id, name, email, age FROM users WHERE name = :name";
$stmt = $db->prepare($query_sql);
$stmt->bindValue(':name', $search_name, SQLITE3_TEXT);
$result = $stmt->execute();
echo "Wyniki zapytania:\n";
$found = false;
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
print_r($row);
$found = true;
}
if (!$found) {
echo "Nie znaleziono pasujących danych\n";
}
$result->finalize(); // Zwolnienie zasobów
$stmt->close(); // Zamknięcie zapytania przygotowanego
// Zamknięcie połączenia z bazą
$db->close();
echo "Połączenie z bazą zostało zamknięte\n";
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Przykład (metoda PDO)
PDO (PHP Data Objects) zapewnia zunifikowaną warstwę abstrakcji dla dostępu do różnych systemów baz danych. Używanie PDO do obsługi SQLite jest polecane ze względu na jego elastyczność i obsługę wielu różnych baz.
php
<?php
// Ścieżka do pliku bazy danych
// Zalecane jest umieszczanie pliku bazy danych w podkatalogu "data" swojego projektu
$db_file = __DIR__ . '/data/servbay_demo_pdo.sqlite'; // __DIR__ wskazuje na katalog z tym skryptem
// Upewnij się, że katalog "data" istnieje
if (!is_dir(__DIR__ . '/data')) {
mkdir(__DIR__ . '/data', 0777, true);
}
try {
// Utwórz nową instancję PDO
// DSN (Data Source Name) ma format 'sqlite:ścieżka_do_pliku_bazy'
$dsn = 'sqlite:' . $db_file;
$pdo = new PDO($dsn);
// Włącz zgłaszanie wyjątków - ułatwia debugowanie
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Ustaw domyślny tryb fetch na tablicę asocjacyjną
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo "Pomyślnie połączono z bazą: " . $db_file . "\n";
// Tworzenie tabeli
$create_table_sql = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
age INTEGER
)";
$pdo->exec($create_table_sql);
echo "Tabela 'users' utworzona lub już istnieje\n";
// Wstawianie danych
$name = 'ServBay PDO User';
$email = '[email protected]';
$age = 35;
// Użycie zapytań przygotowanych
$stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
// Wykonanie wstawienia; jeśli email już istnieje (klucz UNIQUE), operacja się nie powiedzie
try {
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "Wstawiono dane: Name=" . $name . ", Email=" . $email . "\n";
} catch (PDOException $e) {
// Sprawdź, czy to błąd związany z unikalnością (SQLite code 19)
if ($e->getCode() == '23000' || strpos($e->getMessage(), 'UNIQUE constraint failed') !== false) {
echo "Błąd wstawiania: Email '" . $email . "' już istnieje\n";
} else {
throw $e; // Wyjątek dla innych błędów
}
}
$stmt->closeCursor(); // Zwolnienie zasobów
// Pobieranie danych
$search_name = 'ServBay PDO User';
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => $search_name]);
$data = $stmt->fetchAll(); // Pobranie wszystkich wyników
echo "Wyniki zapytania:\n";
if ($data) {
print_r($data);
} else {
echo "Nie znaleziono pasujących danych\n";
}
$stmt->closeCursor(); // Zwolnienie zasobów
} catch (PDOException $e) {
// Obsługa wyjątków PDO
echo "Błąd operacji na bazie: " . $e->getMessage();
// Można też użyć $e->getCode() do pobrania kodu błędu SQLSTATE
}
// PDO automatycznie zamyka połączenie po zakończeniu skryptu
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
O lokalizacji pliku bazy danych:
W powyższych przykładach pliki bazy danych (servbay_demo.sqlite
i servbay_demo_pdo.sqlite
) są tworzone w podkatalogu data/
w tym samym katalogu, co skrypt PHP. Przykładowo, jeśli Twój plik PHP jest w /Applications/ServBay/www/moj-projekt-servbay/index.php
, plik bazy pojawi się w /Applications/ServBay/www/moj-projekt-servbay/data/
.
Przechowywanie bazy w podkatalogu projektu to dobra praktyka — ułatwia zarządzanie i backup. Upewnij się, że użytkownik, na którym działa ServBay, ma uprawnienia do zapisu w tym katalogu (zwykle domyślna konfiguracja ServBay w macOS to zapewnia).
Wskazówki dotyczące bezpieczeństwa i wydajności
- Pliki bazy SQLite zawierają wrażliwe dane — upewnij się, że nie są publicznie dostępne. Najlepiej umieścić je poza katalogiem publicznym (webroot), lub skonfigurować serwer (np. Caddy czy Nginx), by blokował dostęp do plików
.sqlite
. Umieszczanie ich wdata/
w katalogu projektu w przykładach służy wyłącznie wygodzie podczas nauki; w produkcji zastosuj dodatkowe zabezpieczenia. - SQLite najlepiej sprawdza się tam, gdzie nie jest wymagana duża liczba jednoczesnych zapisów. W środowiskach o wysokiej liczbie konkurencyjnych operacji zapisu mogą występować blokady i problemy z wydajnością. Do takich zastosowań lepiej wybrać bazy klient-serwer, np. MySQL czy PostgreSQL.
- Choć ServBay domyślnie włącza rozszerzenia SQLite, jeśli mimo wszystko nie widzisz ich w
phpinfo()
, sprawdź konfigurację PHP w ServBay lub spróbuj zrestartować usługę ServBay.
Najczęściej zadawane pytania (FAQ)
Q: Czy muszę osobno instalować SQLite?
A: Nie. Pakiet PHP dostarczany z ServBay ma już wbudowane i domyślnie włączone rozszerzenia SQLite, możesz ich używać od razu.
Q: Gdzie umieścić plik bazy .sqlite
?
A: Zaleca się przechowywanie pliku bazy w podkatalogu swojego projektu, który nie jest dostępny publicznie z poziomu internetu (np. data/
lub database/
) dla bezpieczeństwa. W przykładach stosujemy ścieżkę __DIR__ . '/data/'
.
Q: Dlaczego mój skrypt PHP nie może połączyć się z bazą SQLite ani utworzyć pliku?
A: Sprawdź poniższe kwestie:
- Upewnij się, że ServBay działa i łączysz się z plikiem PHP poprzez ServBay.
- Sprawdź wynik
phpinfo()
, by potwierdzić aktywność rozszerzeńsqlite3
ipdo_sqlite
. - Upewnij się, że katalog dla bazy istnieje i proces ServBay ma prawo zapisu w tej lokalizacji.
Podsumowanie
ServBay oferuje programistom PHP wygodne wsparcie dla bazy danych SQLite. Dzięki domyślnie włączonemu modułowi SQLite możesz szybko tworzyć i testować aplikacje z użyciem tej bazy lokalnie, bez potrzeby skomplikowanej konfiguracji. Połączenie lekkości i braku konieczności konfiguracji SQLite z prostotą środowiska ServBay to idealny wybór na wydajne i wygodne programowanie lokalne.