Введення в базу даних Sqlite

858

Від автора: при розробці веб-додатків завжди виникає питання, де і в якому вигляді зберігати дані. Звичайно ж їх можна зберігати в базі даних, або в текстових файлах використовуючи спеціальні роздільники. Але що робити, якщо Ви хочете зберігати інформацію в базі даних, а додаток у Вас дуже просте. У цьому випадку нераціонально використовувати цілий сервер бази даних MySql.

В уроці ми з Вами познайомимося ще з однією базою даних, дуже швидкої і дуже простий, якій не потрібен окремий сервер для роботи.

План уроку

1. Введення

2. Підключення модуля бази даних sqlite

3. Створення бази даних і таблиць

4. Заносимо дані в базу даних

5. Висновок інформації з бази даних

Деталі підручника

Тема: PHP

Складність: Середня

Урок: Відео (.mp4)

Час: 01:38:51

Розмір архіву: 110 Mb

Введення в базу даних SqliteВведення в базу даних Sqlite

1. Введення.

Для початку давайте визначимося, що ж таке база даних Sqlite і які в неї переваги перед базами даних серверного типу.

Sqlite – це вбудована реляційна база даних, з відкритим вихідним кодом. Тобто вона не використовує звичну нам модель роботи бази даних клієнт-сервер і не є окремим працюючим процесом. Наприклад, база даних Mysql. Іншими словами движок Sqlite стає як би частиною нашого веб-додатки. При такому підході база даних Sqlite (з усіма таблицями) являє собою звичайний текстовий файл, який ви можете розташувати в зручному для Вас місці.

Тепер давайте розглянемо основні переваги Sqlite.

Самодостатність – базі даних Sqlite не потрібен окремий сервер для роботи. Движок Sqlite вбудовується прямо в додаток і потребує лише доступ до файлів.

Простота встановлення та налаштування нової бази дуже проста і не потребує втручання системних адміністраторів.

Встроєний – движок Sqlite повністю вбудований в PHP 5 і не потрібна установка додаткового програмного забезпечення.

Надає як процедурний, так і об’єктно-орієнтований інтерфейс для роботи.

Висока продуктивність – двигун споживає дуже мало ресурсів і не витрачається час на відправку даних до окремого виділеного сервера.

Sqlite чудово підходить для веб-додатків, коли основна маса запитів являє собою запити на читання також дуже добре підійде для невеликих проектів, які в подальшому Ви збираєтеся розвивати. Так як Sqlite працює з такими ж SQL запитами, що і бази даних серверного типу а це дає нам можливість легко перейти на іншу базу даних, не вносячи кардинальних змін у логіку веб-додатки (особливо використовуючи розширення PDO).

Отже, давайте приступимо до вивчення бази даних sqlite. Я пропоную створити невеликий простенький сайтик на її основі, тим самим ми на практиці можемо навчитися з нею працювати.

2. Підключення модуля бази даних sqlite

Для початку необхідно переконатися, що модуль бази даних sqlite, підключений у файлі php.ini. Для цього відкрийте цей файл (для тих, у кого встановлений Денвер, файл знаходиться за адресою \usr\local\php5\php.ini) та знайдіть рядок:

;extension=php_sqlite.dll

Далі просто приберіть крапку з комою на початку рядка, збережіть зміни у файлі і перезавантажте сервер Apache (або Денвер), у вас рядок повинна бути ось такого вигляду:

На реальних серверах (хостингах) цей модуль вже поключен.

3. Створення бази даних і таблиць.

Насамперед необхідно створити базу даних і необхідні таблиці в ній. Для цього давайте створимо файл config.php, в якому створимо константу DB_NAME для зберігання імені бази даних. Ось код файлу config.php:

Як я і говорив на початку, база даних sqlite – це звичайний текстовий файл (спеціально відформатований), тому вказуючи ім’я бази даних, не забувайте вказувати розширення, в моєму випадку це .db, але це не принципово, розширення можна ставити яке завгодно.

Тепер давайте створимо файл install.php, в якому і створимо базу даних з необхідним набором таблиць. Для цього відкриваємо в файлі PHP –теги і починаємо кодувати. Для початку підключимо файл конфігурації config.php:

include ‘config.php’;

Потім створимо базу даних, використовуючи функцію sqlite_open(‘ім’я бази даних’). Якщо бази даних ще не існує, то ця функція створює базу даних з іменем переданим їй параметром, відкриває її для роботи і повертає дескриптор підключення (в нашому випадку дескриптор зберігся в змінну $db). Якщо ж база даних існує функція просто відкриває базу даних і повертає дескриптор підключення. Нижче наводжу код, необхідний для створення бази даних:

$db = sqlite_open(DB_NAME);
if(!$db) {
exit(‘ERROR’.sqlite_error_string(sqlite_last_error($db)));
}
echo ‘База даних ‘.DB_NAME. ‘ створена
‘;

Як Ви бачите, я після виклику функції sqlite_open(ім’я бази даних), зробив невелику перевірку – на те не виникли при створенні бази даних помилки. Якщо виникла помилка, то відбувається вихід з скрипта з виведенням помилки тексту на екран.

Для виведення помилок бази даних sqlite на екран необхідно використовувати дві функції. Перша це функція: sqlite_last_error(дескриптор підключення до бази), яка повертає код помилки. Друга — sqlite_error_string(код помилки), яка розшифровує код помилки, і повертає безпосередньо текст помилки.

Тепер давайте перейдемо в браузер і запустимо файл install.php. На екрані з’явилася рядок — База даних mydb.db створена. Тепер подивіться в папку де розташовується наш скрипт і Ви побачите що був створений текстовий файл База mydb.db – це і є наша база даних.

Тепер необхідно створити дві таблиці: таблицю menu для зберігання пунктів меню і таблицю articles для зберігання, якихось статей нашого міні-сайту. Першим ділом створимо таблицю menu. Ось код для її створення:

// запит до бази даних
$sql = “CREATE TABLE articles
(
id_articles INTEGER PRIMARY KEY,
name_articles,
text_articles
);
“;
//виконуємо запит
$result = sqlite_query($db,$sql);
if(!$result) {
exit(‘ERROR’.sqlite_error_string(sqlite_last_error($db)));
}
else {
echo ‘Таблиця articles створена
‘;
}

Як Ви бачите, насамперед створюємо sql запит до бази даних. Він дуже схожий на запит до бази даних MySql. Але є відмінності в оголошенні типів даних, які повинні зберігається в стовпцях таблиці. У найпростішому випадку типи даних можна взагалі не вказувати, при цьому дані будуть вставлені рядки. База даних sqlite версії 2 мала всього кілька типів даних, а саме INTEGER та текстовий тип даних для зберігання великих обсягів тексту.

У більш старших версіях, починаючи з версії 2.7.0 були введені різні типи текстових полів, такі як BLOB, CHAR, CLOB, TEXT, у версії 3.0 створені спеціальні класи даних NULL, INTEGER, REAL,TEXT, BLOB, які включають в себе додаткові типи даних.

Але в будь-якому разі типи даних в базі даних sqlite – декларативні, тобто якою б не був вказаний стовпцю клас – в нього можна покласти будь-які дані, як текстові, так і числові. Виняток становить тільки поля, у яких призначений тип даних INTEGER PRIMARY KEY, — цей запис означає, що поле є первинним ключем і тип даних у ньому обов’язково повинен бути числовим. При цьому поле автоматично отримує властивість AUTOINCREMENT.

Після створення запиту до бази даних, необхідно його виконати. Для цього застосовуємо функцію sqlite_query(дескриптор підключення, запит). Ця функція аналогічна функції mysql_query() – тобто вона виконує запит до бази даних і повертає результат запиту. Першим параметром їй передаємо дескриптор підключення до бази даних, другим – безпосередньо сам запит. Потім виконуємо стандартну перевірку на наявність помилок.
Давайте перейдемо в браузер і подивимося що у нас вийшло. Після оновлення сторінки на екрані з’являється рядок – Таблиця articles створена. Значить все правильно.

Тепер створимо другу таблицю menu. Ось код для її створення:

// запит до бази даних
$sql2 = “CREATE TABLE menu
(
id_menu INTEGER PRIMARY KEY,
name_menu,
link_menu
)
“;
//виконуємо запит
$result2 = sqlite_query($db,$sql2);
if(!$result2) {
exit(‘ERROR’.sqlite_error_string(sqlite_last_error($db)));
}
else {
echo ‘Таблиця menu створена
‘;
}

Як Ви бачите тут все аналогічно таблиці articles. Тепер давайте наведу весь код файлу install.php:

‘;
// запит до бази даних
$sql = “CREATE TABLE articles
(
id_articles INTEGER PRIMARY KEY,
name_articles,
text_articles
);
“;
//виконуємо запит
$result = sqlite_query($db,$sql);
if(!$result) {
exit(‘ERROR’.sqlite_error_string(sqlite_last_error($db)));
}
else {
echo ‘Таблиця articles створена
‘;
}
// запит до бази даних
$sql2 = “CREATE TABLE menu
(
id_menu INTEGER PRIMARY KEY,
name_menu,
link_menu
)
“;
//виконуємо запит
$result2 = sqlite_query($db,$sql2);
if(!$result2) {
exit(‘ERROR’.sqlite_error_string(sqlite_last_error($db)));
}
else {
echo ‘Таблиця menu створена
‘;
}
sqlite_close($db);
echo ‘База даних закрита…’;
}
else {
exit(‘База даних вже існує’);
}
?>

Зверніть увагу, я зробив ще одну перевірку на існування файлу бази даних. Якщо його немає, то ми створюємо базу даних і необхідні таблиці, якщо ж він є, то виводимо на екран повідомлення ‘База даних вже існує’. В кінці просто закриваємо з’єднання з базою даних за допомогою функції sqlite_close(дескриптор підключення); Давайте перейдемо в браузер і подивимося що вийшло:

Введення в базу даних Sqlite

Як бачите, база даних створена з двома табличками.

4. Заносимо дані в базу даних.

Тепер, коли у нас є база даних необхідно наповнити її. Для цього пропоную зробити дуже просту адміністраторську панель для нашого сайту. В якій, буде всього дві форми для додавання даних. Перша для додавання пунктів меню, друга для додавання статей.

Давайте створимо файл admin.php з таким вмістом:

Admin panel

ADMIN PANEL

Додавання нового пункту меню

Name menu

Link

Додавання нової статті

Name article

Text

Як Ви бачите – звичайна html-розмітка, дві форми укладені в загальний контейнер, невелика шапка і футер. Так само зверніть увагу, що я підключаю файл стилів style.css, який необхідно створити. Ось його код:

#insert_menu {
width:300px;
float:left;
padding:10px;
}
#insert_articles{
width:300px;
float:left;
padding:10px;
border-left:1px solid #074776;
margin-bottom:20px;
}
h2 {
border-bottom:20px solid #d3d3d3;
}
#wrap{
width:950px;
margin:0px auto 0px auto;
border:1px solid #074776;
padding:10px;
}
#footer {
clear:both;
text-align:center;
border-top:20px solid #d3d3d3;
}

Тепер якщо набрати в браузері тільки що створений файл admin.php ми побачимо наступне:

Введення в базу даних Sqlite

Тепер давайте створимо файл functions.php, в якому ми будемо зберігати наші користувальницькі функції. Перша функція, що ми опишемо буде функція очищення даних clear($str), так як нас приходять дані з форми, а їх необхідно фільтрувати. Отже, код функції:

function clear($str) {
$str = trim($str);
$str = strip_tags($str);
//перевіряємо чи включена директива конфігурації magic_quotes_gpc
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
$str = sqlite_escape_string($str);
return $str;
}

Як Ви бачите, все просто, стандартні функції. Але тут є одне зауваження: не рекомендується вставляти дані в базу даних, у яких екрановані спецсимволи за допомогою функції addcslashes(). Тому перевіряємо, якщо у користувача включено екранування спецсимволов (директива конфігурації magic_quotes_gpc), то прибираємо екрануючі бэкслэши за допомогою функції stripslashes($str). Для екранування спецсимволов у бази даних sqlite є своя функція sqlite_escape_string(рядок), яка екранує спецсимволи в рядку для подальших запитів.

Повертаємося в файл admin.php і створимо обробник форми, ось його код (вставляємо перед тегами html):

Отже, на початку відкриваємо сесію – для системних повідомлень. Потім підключаємо файл functions.php. Далі якщо була відправлена форма, спочатку відкриваємо базу даних, очищаємо отримані дані і викликаємо функцію insert_menu ($db,$name_menu,$link_menu), яка вставляє дані в базу даних (ми її трохи пізніше опишемо). Функція приймає три параметри: перший дисриптор підключення до бази даних, другий і третій дані які потрібно вставити. Вона буде повертати TRUE, якщо дані успішно вставили в базу, і повідомлення про помилку, у разі невдалої вставки даних.

Тепер поки у нас відкритий файл admin.php давайте вставимо висновок системних повідомлень, які будуть зберігається в сесії. Цей код вставляємо після заголовка другого рівня ADMIN PANEL:

Тепер відкриваємо файл functions.php і описуємо функцію insert_menu():

function insert_menu($db,$name_menu,$link_menu) {
//SQL запит
$sql = “INSERT INTO
menu(name_menu,link_menu)
VALUES(‘$name_menu’,’$link_menu’)”;
//виконуємо запит
$result = sqlite_query($db,$sql);
if($result) {
return TRUE;
}
else {
return ‘Помилка виконання запиту ‘.sqlite_error_string(sqlite_last_error($db);
}
}

Як Ви бачите, дані в базу даних sqlite вставляються точно також як і в базу даних mysql. Дивіться, точно такий же SQL-запит, єдина відмінність – це те, що ми використовуємо функцію sqlite_query() для виконання запиту. Якщо запит успішно виконаний повертаємо TRUE, якщо ні, то повертаємо повідомлення про помилку. Давайте перейдемо в браузер і спробуємо додати дані в таблицю menu. Запускаємо файл admin.php і вводимо дані в форму. Після натискання на кнопку відправки форми, на екран виводиться напис що дані успішно додані.

Введення в базу даних Sqlite

Тепер залишилося реалізувати додавання статей в базу даних. Для цього створимо функцію insert_articles(), яка аналогічно функції insert_menu(), буде вставляти дані в базу, і повертати при цьому або TRUE, або повідомлення про помилку, в залежності від результату.

Ось код функції insert_articles() (вона також приймає три параметри: перший-це дескриптор підключення, другий і третій дані які необхідно вставити в базу):

function insert_articles($db,$name_articles,$text_articles) {
//SQL запит
$sql = “INSERT INTO
articles(name_articles,text_articles)
VALUES(‘$name_articles’,’$text_articles’)”;
$result = sqlite_query($db,$sql);
if($result) {
return TRUE;
}
else {
return ‘Помилка виконання запиту ‘.sqlite_error_string(sqlite_last_error($db);
}
}

Як Ви бачите тут все аналогічно. Тепер повертаємося в файл admin.php і додаємо обробник для другої форми. Для цього вставляємо наступний код, відразу після закриваючої дужки умовного оператора if, який перевіряє, чи існує у масиві POST осередок з ключем $_POST[‘submit_menu’]:

if(isset($_POST[‘submit_articles’])) {
//Очищаємо отримані дані
$name_articles = clear($_POST[‘name_articles’]);
$text_articles = clear($_POST[‘text_articles’]);
//вставляємо дані в базу даних
$msg = insert_articles($db,$name_articles,$text_articles);
if($msg === TRUE) {
$_SESSION[‘msg’] = ‘Стаття додано’;
}
else {
$_SESSION[‘msg’] = $msg;
}
}

Тобто, просто кажучи, перевіряємо натиснута кнопка відправки форми. Якщо так то очищаємо дані і викликаємо функцію insert_articles().

Тепер давайте спробуємо додати текст в базу. Після відправки форми на екран вывелось сообщене Стаття додана, значить ми все робимо правильно.

5. Висновок інформації з бази даних.

Тепер, коли дані додані в базу даних, давайте реалізуємо висновок даних на екран. Для цього створимо файл index.php ось з такою html-розміткою:

Ласкаво просимо

І в файл style.css додамо кілька правил:

#menu {
width:200px;
float:left;
}
#text {
float:left;
width:700px;
border-left:2px solid #d3d3d3;
padding:10px;
}
#header{
height:150px;
width:100%;
border-bottom:20px solid #d3d3d3;
}
h1 {
text-align:center;
}

Як Ви бачите, нічого складного тут немає звичайний html і css. Тепер давайте перейдемо в браузер і подивимося що у нас вийшло:

Введення в базу даних Sqlite

Тепер повернемося до файлу index.php і перед html – розміткою відкриємо php теги. Потім відкриємо сесію, підключимо конфігураційний файл і файл functions.php, відкриємо базу даних для роботи і викличемо функцію get_menu(), яка буде повертати масив пунктів меню, що зберігаються в базі даних, і функцію get_articles(), яка буде повертати масив статтей. Ось цей код:

Тепер перейдемо в файл functions.php і опишемо функції get_menu() і get_articles(). Ось код для цих функцій:

function get_articles($db) {
// SQL – запит
$sql = “SELECT id_articles,name_articles,text_articles articles FROM”;
//виконуємо запит і повертаємо асоциативный масив даних
$result = sqlite_array_query($db,$sql,SQLITE_ASSOC);
if(!$result) {
return FALSE;
}
return $result;
}
function get_menu($db) {
// SQL – запит
$sql = “SELECT name_menu,link_menu FROM menu”;
//виконуємо запит і повертаємо асоциативный масив даних
$result = sqlite_array_query($db,$sql,SQLITE_ASSOC);
if(!$result) {
return FALSE;
}
return $result;
}

Як Ви бачите, функції приймають параметром дискриптор підключення до бази даних. Давайте поясню роботу функцій на прикладі функції get_menu(), так як функція get_articles() — аналогічна їй.

Як зазвичай формуємо SQL – запит, він точно такий же як і в базі даних Mysql. Вибираємо поля name_menu і link_menu з бази даних menu. Далі зверніть увагу на дуже цікаву функцію sqlite_array_query(дескриптор, SQL – запит, параметр як повертати дані). Такої функції немає в базі даних Mysql!!. Дивіться — ця функція виконує переданий їй SQL – запит і відразу ж повертає вже готовий реальний масив даних (у нашому випадку асоціативний так як ми передали їй константу SQLITE_ASSOC, що означає повернути дані у вигляді асоціативного масиву). Так що нам залишається лише повернути цей масив даних.

Звичайно ж, можна було скористатися функцією sqlite_query(), а потім в циклі отримати асоціативний масив за допомогою функції sqlite_fetch_array(результат виконаного запиту, параметр як повертати дані), яка виконує абсолютно ті ж дії, що і для бази даних mysql(mysql_fetch_array()).

Але, погодьтеся, використовувати функцію sqlite_array_query() набагато зручніше і швидше.

Тепер, коли у нас є дані у вигляді масивів, залишилося тільки їх вивести на екран за допомогою циклу foreach. Ось код, який потрібно вставити в файл index.php в блоки div з ідентифікаторами menu і text відповідно:

Для блоку menu

“;
foreach($menu as $item) {
echo “

  • “.$item[‘name_menu’].”
  • “;
    }
    echo “

    “;
    }
    ?>

    Для блоку text

    “.$item2[‘name_articles’].”

    “;
    echo “

    “.$item2[‘text_articles’].”

    “;
    }
    }
    ?>

    Отже, перейдемо в браузер і подивимося що вийшло:

    Введення в базу даних Sqlite

    Як Ви бачите дані успішно вивелися на екран.

    Отже у цьому відео уроці ми з вами коротко розглянули базу даних Sqlite. Ми навчилися створювати базу даних, додавати в неї необхідні таблиці, вставляти дані а також навчилися виводити дані на екран. Основні базові операції з движком Sqlite ми з Вами вивчили, решта ж такі як і в базі даних Mysql (наприклад, для видалення чи оновлення даних — потрібно все також скласти SQL запит а далі просто його виконати за допомогою функції sqlite_query()).

    Дивіться, як швидко ми з Вами створили цей міні сайтик, на основі бази даних Sqlite, тепер при перенесенні такого сайту на хостинг або на інший комп’ютер, достатньо лише скопіювати папку з сайтом, і на цьому все. База даних також з копіюється так як це звичайний текстовий файл.

    На цьому урок закінчений. Якщо виникнуть питання пишіть, постараємося на них відповісти! А на цьому все. Вдалого Вам кодування і до нових зустрічей.