Работаем с SQLite
Создание базы данных и таблицы SQLite
Рассмотрим на примере создание базы данных и таблицы SQLite в PHP 5:
// Создание базы/таблицы данных
error_reporting(0); // Отключение вывода стандартных сообщений об ошибках
try {
if (!file_exists("sample.db")) {
// Базы нет, создаем ее
$db = sqlite_open("sample.db");
if (!$db) throw new Exception("невозможно создать базу!");
$sql = "CREATE TABLE test
(
id INTEGER PRIMARY KEY, -- автоинкремент
textfield TEXT, -- текстовое поле неограниченной длины
intfield INTEGER(2) -- числовое поле
)";
sqlite_query($db, $sql);
if (sqlite_last_error($db)) throw new Exception("невозможно создать таблицу в базе!");
echo "База и таблица созданы";
sqlite_close($db);
}
} catch (Exception $exception) {
echo "Произошла ошибка в строке", $exception->getLine()-1, ": ",
$exception->getMessage();
}
?>
Поскольку удобнее всего для обработки ошибок применять в PHP 5 новую конструкцию try/catch/throw, которая будет также выводить информацию о возникшей ошибке, то в самом начале PHP сценария будет уместно функцией error_reporting() отключить вывод стандартных сообщений об ошибках.
Далее идет блок try, в котором проверяется наличие файла базы данных. Если такового не существует – переходим к его созданию функцией sqlite_open(), которая не только открывает файлы баз данных, но и создает его в случае отсутствия, чем мы и воспользуемся в нашем сценарии. В случай невозможности создания файла через throw new Exception() генерируется исключение и управление передается в блок catch для вывода сообщения об ошибке и завершения сценария. Если же создание файла базы произошло успешно – формируется SQL-запрос на создание тестовой таблицы.
Каким же должен быть SQL-запрос для создания таблицы, учитывая бестиповый характер таблиц SQLite? Все очень и очень просто - при описании полей таблицы принимаются в расчет только имена полей. Указание типов полей и их максимальной длины является необязательным и SQLite’ом не учитывается! Исключение составляет только первичный ключ (PRIMARY KEY), объявленный как INTEGER – такое поле автоматически становится автоинкрементным.
Таким образом, аналогичную таблицу можно было бы создать и таким SQL-оператором:
CREATE TABLE test(id INTEGER PRIMARY KEY, textfield, intfield)
Выполнение запроса к базе производится функцией sqlite_query(), а проверка успешности выполнения запрос функцией sqlite_last_error().
Необязательно закрытие соединения с базой SQLite выполняется функцией sqlte_close().
В случае генерации любого исключения в блоке catch методом getLine() объекта $exception осуществляется вывод номера строки, где ошибка произошла, и методом getMessage() информационного сообщения об ошибке.
Сохранение данных в таблицу SQLite
Добавим в нашу тестовую таблицу SQLite некоторые значения.
// Ввод данных в базу/таблицу
error_reporting(0); // Отключение вывода стандартных сообщений об ошибках
try {
if (file_exists("sample.db")) {
// Открытие файла базы
$db = sqlite_open("sample.db");
if (!$db) throw new Exception("невозможно открыть базу!");
$sql = "INSERT INTO test(textfield, intfield) VALUES(''PHP version'', 5)";
sqlite_query($db, $sql);
if (sqlite_last_error($db)) throw new Exception("невозможно добавить данные в таблицу!");
echo "Данные в таблицу добавлены успешно";
sqlite_close($db);
}
} catch (Exception $exception) {
echo "Произошла ошибка в строке ", $exception->getLine()-1, ": ",
$exception->getMessage();
}
?>
По сравнению с предыдущим сценарием создания таблицы с точки зрения PHP в представленном коде нет ничего нового. Тем не менее, стоит обратить внимание на SQL-оператор INSERT добавления данных в таблицу. В его записи нет неожиданностей. Однако, учитывая бестиповый характер таблиц SQLite возможен и следующий вариант, который не будет являться ошибочным:
INSERT INTO test(textfield, intfield) VALUES(5,''PHP version'')
В этом примере числовое значение записывается в текстовое поле, а символьное значение в целочисленное! Поскольку при создании таблицы типы полей, указанные в операторе CREATE TABLE игнорируются, SQLite позволяет вставлять данные любого типа в любые поля! Единственно, когда типы в SQLite имеют значение – это процесс сортировки или выборки данных по условиям, при этом приведение типов SQLite выполняет автоматически.
Вывод данных из таблицы SQLite
Теперь посмотрим, каким образом PHP 5 может произвести вывод данных из созданной нами таблицы.
// Вывод данных из базы/таблицы
error_reporting(0); // Отключение вывода стандартных сообщений об ошибках
try {
if (file_exists("sample.db")) {
// Открытие файла базы
$db = sqlite_open("sample.db");
if (!$db) throw new Exception("невозможно открыть базу!");
$sql = "SELECT * FROM test";
$result = sqlite_query($db, $sql);
if (sqlite_last_error($db)) throw new Exception("невозможно выбрать данные из таблицы!");
while ($row = sqlite_fetch_object($result)) {
echo "Поле 1: " . $row->textfield . "\n";
echo "Поле 2: " . $row->intfield . "\n";
}
sqlite_close($db);
}
} catch (Exception $exception) {
echo "Произошла ошибка в строке ", $exception->getLine()-1, ": ",
$exception->getMessage();
}
?>
Выполняя запрос SELECT необходимо результат сохранять в переменную, которая будет иметь ресурсный тип ($result). Вывод данных из такой переменной возможен множеством способов, однако в любом случае потребуется перебор всех записей, как это делалось и при работе с MySQL.
В данном примере используется функция sqlite_fetch_object(), возвращающая данные одной записи в виде объекта. Получить же значение одного конкретного поля из такого объекта можно, обратившись к его свойству, имя которого совпадает с именем поля.
Как это принято в PHP, функция sqlite_fetch_object() возвратит FALSE, в случае прохода по всем записям вернувшихся значений, вот почему ее использование удачно сочетается с оператором цикла while.
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-04-17 » 23 сервиса для эффективного экспресс-аудита любого сайта
- 2024-04-08 » Яндекс переходит на новую версию Wordstat
- 2024-04-08 » Яндекс интегрировал в свой облачный сервис эмпатичную нейросеть
- 2024-04-08 » Новая версия нейросети Claude превзошла по мощности аналоги Google и OpenAI
- 2024-04-08 » Как пользоваться GPT 4 и Claude бесплатно и без VPN
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
Человек - аристократ среди животных Гейне Генрих - (1797-1856) - немецкий поэт и публицист |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.