Використання вбудованого модуля бази даних SQLite у ServBay для розробки PHP
ServBay — це потужне локальне середовище веб-розробки, спеціально створене для розробників і з підтримкою багатьох технологічних стеків. Воно має вбудований модуль бази даних SQLite, що дозволяє надзвичайно просто використовувати SQLite для зберігання й керування даними у PHP-додатках. У цій статті детально описано, як скористатися цією можливістю у ServBay.
Огляд модуля SQLite
SQLite — це легка, вбудована система управління реляційними базами даних. На відміну від традиційних СУБД клієнт/сервер (наприклад, MySQL, PostgreSQL), SQLite не вимагає окремого серверного процесу, а працює як бібліотека, вбудована безпосередньо в застосунок. Вся база даних зберігається в одному файлі, що надзвичайно спрощує розгортання й супровід.
SQLite набув широкої популярності завдяки таким характеристикам. Він особливо підходить для невеликих і середніх застосунків, локального кешування, мобільних застосунків, а також для розробницького й тестового середовищ:
Основні особливості
- Легкість: компактна бібліотека, мінімальне споживання ресурсів.
- Без налаштувань: не потрібно встановлювати чи конфігурувати сервер, керувати правами користувачів — все працює “з коробки”.
- Висока продуктивність: для більшості читальних операцій та помірної кількості записів SQLite пропонує чудову швидкодію.
- Зберігання у єдиному файлі: уся база міститься в одному
.sqlite
-файлі, що спрощує резервне копіювання, міграцію та менеджмент. - Підтримка транзакцій ACID: надійна обробка транзакцій, забезпечує цілісність і консистентність даних.
- Кросплатформеність: підтримка різноманітних ОС та мов програмування.
Підтримка SQLite у ServBay
ServBay інтегрує декілька версій PHP, і для кожної з них відповідні розширення SQLite (наприклад, sqlite3
та pdo_sqlite
) вже заздалегідь встановлені та ввімкнені. Це означає, що вам не потрібно окремо завантажувати, компілювати або налаштовувати PHP-розширення — ви можете одразу використовувати функціонал SQLite у ваших PHP-проєктах.
Необхідні попередні кроки
- Встановіть і запустіть ServBay на macOS.
- Активуйте та запустіть необхідну версію PHP у ServBay.
- Підготуйте директорію для розміщення сайтів; рекомендується використовувати стандартний корінь сайту ServBay —
/Applications/ServBay/www
або його піддиректорію.
Як користуватися SQLite у ServBay
Оскільки модуль SQLite уже активовано за замовчуванням, не потрібно виконувати жодних додаткових дій для активації. Оточення PHP повністю готове, і ви можете напряму викликати функції та класи, пов’язані з SQLite.
Як переконатися, що розширення SQLite увімкнене:
Якщо ви хочете підтвердити, що розширення SQLite успішно завантажене, перегляньте сторінку, створену з допомогою phpinfo()
.
- Створіть PHP-файл із вмістом
<?php phpinfo(); ?>
(наприклад,info.php
). - Помістіть файл у директорію вашого сайту в межах кореня ServBay, наприклад,
/Applications/ServBay/www/servbay.demo/info.php
. - Відкрийте цей файл у браузері (наприклад,
http://servbay.demo/info.php
). - Шукайте на сторінці результати для "sqlite" або "pdo_sqlite". Якщо знаходите відповідні блоки, розширення працює коректно.
Використання SQLite у PHP-коді
Коли ви переконалися, що розширення SQLite доступне, можна напряму виконувати операції з базою із застосунку на PHP. PHP пропонує кілька способів роботи з SQLite, найпопулярніші з яких — клас SQLite3
(об’єктно-орієнтований підхід) і PDO
(PHP Data Objects).
Нижче наведені базові приклади роботи з базою на основі цих двох способів: підключення, створення таблиці, вставка й запит даних у середовищі ServBay. Рекомендується зберігати ці PHP-файли разом із створюваними .sqlite
-базами всередині папки вашого проєкту, наприклад /Applications/ServBay/www/your-project-name/
.
Приклад коду (стандартний спосіб через SQLite3)
У цьому підході використовується вбудований клас PHP SQLite3
, який надає об’єктно-орієнтований API для роботи з SQLite.
php
<?php
// Шлях до файлу бази даних
// Рекомендується зберігати базу в піддиректорії data/ вашого проєкту
$db_file = __DIR__ . '/data/servbay_demo.sqlite'; // __DIR__ — це директорія поточного скрипта
// Пересвідчіться, що директорія для даних існує
if (!is_dir(__DIR__ . '/data')) {
mkdir(__DIR__ . '/data', 0777, true);
}
// Підключення до бази даних SQLite
// Якщо файл відсутній, SQLite створить його автоматично
try {
$db = new SQLite3($db_file);
echo "Успішно підключено до бази: " . $db_file . "\n";
} catch (Exception $e) {
die("Не вдалося підключитися до бази даних: " . $e->getMessage());
}
// Створення таблиці
// Використовуйте IF NOT EXISTS, щоб уникнути помилки при повторному створенні
$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 "Таблиця 'users' створена або вже існує\n";
} else {
echo "Помилка створення таблиці: " . $db->lastErrorMsg() . "\n";
}
// Вставка даних
$name = 'ServBay Demo User';
$email = '[email protected]';
$age = 30;
// Використання підготовлених виразів для запобігання SQL-ін’єкціям
$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);
// Виконання вставки та перевірка результату (email повинен бути унікальним; повторна вставка призведе до помилки)
if ($stmt->execute()) {
echo "Дані успішно вставлено: Name=" . $name . ", Email=" . $email . "\n";
} else {
// Перевірте, чи сталася помилка унікальності
if (strpos($db->lastErrorMsg(), 'UNIQUE constraint failed') !== false) {
echo "Не вдалося вставити: Email '" . $email . "' вже існує\n";
} else {
echo "Не вдалося вставити: " . $db->lastErrorMsg() . "\n";
}
}
$stmt->close(); // Закриття підготовленого виразу
// Запит даних
$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 "Результати запиту:\n";
$found = false;
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
print_r($row);
$found = true;
}
if (!$found) {
echo "Не знайдено відповідних даних\n";
}
$result->finalize(); // Звільнення результатів
$stmt->close(); // Закриття підготовленого виразу
// Закриття підключення до бази
$db->close();
echo "Підключення до бази закрито\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
Приклад коду (через PDO)
PDO (PHP Data Objects) забезпечує універсальний абстрактний шар для доступу до різних типів баз даних. Для SQLite він відкриває гнучкіші можливості й рекомендований до використання.
php
<?php
// Шлях до файлу бази даних
// Рекомендуємо зберігати файл у піддиректорії data/ проєкту
$db_file = __DIR__ . '/data/servbay_demo_pdo.sqlite'; // __DIR__ — це директорія поточного скрипта
// Переконайтеся, що директорія для даних існує
if (!is_dir(__DIR__ . '/data')) {
mkdir(__DIR__ . '/data', 0777, true);
}
try {
// Створіть новий екземпляр PDO
// DSN (Data Source Name) має формат 'sqlite:шлях_до_файлу'
$dsn = 'sqlite:' . $db_file;
$pdo = new PDO($dsn);
// Встановіть режим викидання виключень для зручності відлагодження
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Як типове — вибірка асоціативних масивів
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo "Успішно підключено до бази: " . $db_file . "\n";
// Створення таблиці
$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 "Таблиця 'users' створена або вже існує\n";
// Вставка даних
$name = 'ServBay PDO User';
$email = '[email protected]';
$age = 35;
// Підготовлений вираз
$stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
// Виконання вставки й перевірка (email повинен бути унікальним; повторна спроба спричинить помилку)
try {
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "Дані успішно вставлено: Name=" . $name . ", Email=" . $email . "\n";
} catch (PDOException $e) {
// Перевірка, чи це помилка унікальності (код SQLite 19 або SQLSTATE 23000)
if ($e->getCode() == '23000' || strpos($e->getMessage(), 'UNIQUE constraint failed') !== false) {
echo "Не вдалося вставити: Email '" . $email . "' вже існує\n";
} else {
throw $e; // Перекидання інших помилок
}
}
$stmt->closeCursor(); // Звільнення ресурсів
// Запит даних
$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(); // Отримання всіх рядків
echo "Результати запиту:\n";
if ($data) {
print_r($data);
} else {
echo "Не знайдено відповідних даних\n";
}
$stmt->closeCursor(); // Звільнення ресурсів
} catch (PDOException $e) {
// Обробка виключення PDO
echo "Помилка роботи з базою: " . $e->getMessage();
// Код помилки SQLSTATE можна отримати через $e->getCode()
}
// З'єднання PDO автоматично закривається по завершенні скрипта
?>
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
Де зберігати файл бази даних:
У наведених вище прикладах файл бази даних (servbay_demo.sqlite
і servbay_demo_pdo.sqlite
) створюється в піддиректорії data/
щодо директорії, де розташований PHP-скрипт. Наприклад, якщо ваш PHP-файл міститься у /Applications/ServBay/www/my-servbay-project/index.php
, база буде розташована тут: /Applications/ServBay/www/my-servbay-project/data/
.
Зберігання бази в підпапці вашого проекту є гарною практикою для зручності менеджменту та резервного копіювання. Переконайтеся, що користувач, від імені якого запущений ServBay, має права на запис у цій папці (у стандартних налаштуваннях ServBay для macOS це не проблема).
На що слід звернути увагу
- Файл бази даних SQLite є чутливим — не допускайте публічного доступу до нього. Для захисту розміщуйте файл поза публічною (web-доступною) директорією, або налаштуйте сервер (наприклад, Caddy чи Nginx), щоб блокувати прямий доступ до
.sqlite
-файлів. Розміщення у папціdata/
біля сайту зроблено лише для прикладу; у продакшн-середовищі використовуйте жорсткіші заходи безпеки. - SQLite добре підходить для ситуацій із рідкісними конкурентними записами. У випадку високого рівня одночасних записів можливі затримки чи блокування. Для таких випадків краще обирати MySQL або PostgreSQL.
- Попри те, що ServBay за замовчуванням активує розширення SQLite, якщо ви не бачите потрібної інформації у
phpinfo()
, перевірте конфігурацію PHP для ServBay чи спробуйте перезавантажити службу.
Часті запитання (FAQ)
Q: Чи потрібно мені окремо встановлювати SQLite?
A: Ні. У складі PHP-пакета ServBay розширення SQLite вже вбудоване та активоване — ви можете одразу використовувати його у коді.
Q: Де розміщувати файл моєї бази .sqlite
?
A: Рекомендуємо зберігати базу поза публічним web-доступом — у підпапці вашого проєкту (наприклад, data/
чи database/
), для підвищення безпеки. У прикладах шляхи наводяться як __DIR__ . '/data/'
.
Q: Чому мій PHP-скрипт не може підключитися до SQLite або створити файл?
A: Перевірте наступне:
- Впевніться, що ServBay працює, і що ви запускаєте PHP-скрипт саме через ServBay.
- За допомогою
phpinfo()
перевірте, чи активовані розширенняsqlite3
таpdo_sqlite
. - Перевірте, чи існує потрібна папка для бази і чи має ServBay права на запис у неї.
Висновок
ServBay надає PHP-розробникам зручну підтримку для роботи з SQLite. Завдяки вбудованому та увімкненому модулю SQLite, ви можете легко розробляти й тестувати локальні застосування без складних налаштувань. Поєднання легкості та безконфігураційності SQLite робить ServBay ефективним і простим інструментом для локальної розробки.