2016
31
Март

Php sqlite

grigoriev
40713

Недавно решил оптимизировать расходы на содержание своих интернет проектов. Обратил внимание, что хостинг с поддержкой mysql дороже чем хостинг только с php. Тем более количество баз данных ограниченно тарифным планом. Конечно без бд то же никак, но отказаться от использования mysql можно. Ему на замену приходит sqlite.

В отличии от mysql, sqlite является библиотекой, а не серверной программой. Эта библиотека уже встроена в интерпритатор php и не требует каких то ухищрений с администрированием. Для работы достаточно наличия на сервере только интерпритатора php. Это значительно снижает стоимость у хостера тарифного плана. Sqlite пишет все свои данные в файл, который создаётся на сервере. Для каждой бд создаётся свой файл. Ограничением по количеству бд может являться только объём жёсткого диска под сайт. Так как все бд хранятся в файлах то для резервирования базы или переезда к другому хостеру файлы бд всего лиш нужно скопировать.

Все свои сайты я сначала создаю на локальном компьютере. На нём у меня стоит windows. Поэтому разберём подключение sqlite и sqlite3 под windows.

Подключение sqlite

Будем считать что веб сервер apache и php у нас уже установлен. В зависимости от версии интерпритатора в папке ext корневой директории PHP должны быть файлы php_pdo.dll, php_pdo_sqlite.dll, php_sqlite.dll. Для того что бы подключить sqlite, открываем файл php.ini в любом текстовом редакторе и раскомментируем директивы подключения нужных нам модулей. Модули, закомментированные при помощи точки с запятой ;, как правило, требуют дополнительных внешних библиотек. Директивы должны выглядеть так:

  • extension = имя_модуля

Для подключения php_sqlite.dll в php.ini, нужно сначала подключить расширения php_pdo.dll и php_pdo_sqlite.dll. Только в такой последовательности:

  • extension=php_pdo.dll
  • extension=php_pdo_sqlite.dll
  • extension=php_sqlite.dll

Строки extension=php_pdo.dll может в ini и не быть, раскоментируем тогда только extension=php_pdo_sqlite.dll и extension=php_sqlite.dll После всего этого перезапустим апачь. Для проверки правильности установки запустим строку кода:

                                      
    echo sqlite_libversion();

Должно показать версию sqlite.

Php sqlite примеры

Создание файла БД

                                                                          
    $db = sqlite_open("mytest.db");
//ООП интерфейс
//создаём объект от спец. класса SQLiteDatabase
    $db1 = new SQLiteDatabase("mytest1.db");
    sqlite_close($db);
//ООП интерфейс
    unset($db1);//убиваем объект 

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

                                                                           
//проверим существует ли БД
//если БД нет то создадим её и таблицу в ней msages
    if(!file_exists("mytest.db")){
        $db=new SQLiteDatabase("mytest.db");
        $sql="CREATE TABLE msages(
            id INTEGER PRIMARY KEY,
            fname TEXT,
            email TEXT,
            msage TEXT,
            datetime INTEGER,
            
        )";
        $db->query($sql);
    }else{
//если бд есть то просто подключ. к ней
        $db=new SQLiteDatabase("mytest.db");
    }

Выполнение запроса

                                                                           
    $sql = "SELECT * FROM table";
    $db = sqlite_open("test.db");
    $res = sqlite_query($db, $sql);
    sqlite_close($db);
//ООП интерфейс
    $db = new SQLiteDatabase("test.db");
    $res = $db->query($sql);
    unset($db);

Получение результата

                                                                           
    $result = sqlite_query($db, $sql);
    $row = sqlite_fetch_array($result, [TYPE]);
// ООП-интерфейс
    $result = $db->query($sql);
    $row = $result->fetch([TYPE]);
Константы типов:
SQLITE_BOTH // По умолчанию
SQLITE_NUM
SQLITE_ASSOC

Получение результата в виде массива

                                                                          
    $result = sqlite_array_query($db,
    $sql);
// ООП-интерфейс
    $result = $db->arrayQuery($sql);
    foreach($result as $row){
        echo $row[0];
    }

Подключение php sqlite3

Php sqlite3 подключается по такому же принципу как и sqlite. В папке ext должны быть библиотека php_sqlite3.dll. В php.ini должна быть раскомментирована строчка extension=php_sqlite3.dll. Проверяем подключение:

<?php                                      
   print_r (SQLite3::version());

Получаем массив с информацией о библиотеке.

Php sqlite3 примеры

Создание файла БД, открытие и закрытие соединения

                                                                           
    $db = new SQLite3('mydb.db');
    $db->close();

Создание таблиц в БД

                                                                           
//проверим существует ли БД
//если БД нет то создадим её и таблицу в ней msages
    if(!file_exists("mydb.db")){
        $db = new SQLite3('mydb.db');
        $sql="CREATE TABLE msages(
            id INTEGER PRIMARY KEY,
            fname TEXT,
            email TEXT,
            msage TEXT,
            datetime INTEGER,  
        )";
        $db->query($sql);
    }else{
//если бд есть то просто подключ. к ней
       $db = new SQLite3('mydb.db');
    }

Выполнение запроса

                                                                           
    $sql = "SELECT * FROM table";
    $db = new SQLite3('mydb.db');
    $db->query($sql);

Получение результата

                                      
$db = new SQLite3('mydb.db');
$sql="SELECT id, fname, email, msage, datetime FROM msages 
ORDER BY id DESC";   
$result = $db->query($sql);
print_r($result->fetchArray([TYPE])); 
Константы типов:
SQLITE3_BOTH
SQLITE3_NUM
SQLITE3_ASSOC

Получение результата в виде массива

                                      
$db = new SQLite3('mydb.db');
$sql="SELECT id, fname, email, msage, datetime FROM msages 
ORDER BY id DESC";   
$result = $db->query($sql);
$array = array();
while($data = $result->fetchArray(SQLITE3_ASSOC))
{
     $array[] = $data;
}
foreach($array as $row){
        echo $row['fname'];
}                                    

Поделиться:

Комментарии

Abraham

Abraham

09.11.2016 11:37 Ответить

Очень интересно, а можно ето проделать в instantcms?

Алексей Григорьев

Алексей Григорьев

09.11.2016 21:05 Ответить

Если честно, не знаю. Я работаю с джумла и где то видел, что она может работать с php sqlite3. На счёт instantcms затрудняюсь ответить.

Виктор

Виктор

30.12.2016 19:18 Ответить

Приветствую. а как добавить строку в таблицу?

Алексей Григорьев

Алексей Григорьев

30.12.2016 19:34 Ответить

Вечер добрый. Для добавления строки используйте INSERT INTO. Подробнее можете на этом блоге в шпаргалках глянуть, там есть по SQL http://aweb34.ru/shpargalki/sql-shpargalka-operatsii-s-dannymi

You have no rights to post comments

Используя данный сайт, вы даете согласие на использование файлов cookie, помогающих мне сделать его удобнее для вас. Уведомление о cookie