Март
Php sqlite
Недавно решил оптимизировать расходы на содержание своих интернет проектов. Обратил внимание, что хостинг с поддержкой 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
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