Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Работаем с SQLite

Источник: realcoding.net

Создание базы данных и таблицы SQLite


Рассмотрим на примере создание базы данных и таблицы SQLite в PHP 5:

<?php
     //  Создание базы/таблицы данных
    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 некоторые значения.

<?php
      // Ввод данных в базу/таблицу
     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 может произвести вывод данных из созданной нами таблицы.

<?php
      // Вывод данных из базы/таблицы
      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.



Похожие статьи:
- JavaScript спешит на помощь - 1
- Вставка клипов на страницу
- Введение в SQLite
- Регистрация доменных имен своими руками. Часть 1: немного теории.
- Тонкие места интернет-магазинов
- Как разработать особенный сайт?
- Что такое блог?
- Составные части URL
- Создание веб проектов в офшорных странах
- 5 самых распространненых ошибок в маркетинге поисковых систем.
- Электронные журналы - что это?
- Магазин рекламных мест
- Cайт с помощью HTML::Mason


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]