Март
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