Официальная страница / Official page
Драйвер PDO SQLite3 для CodeIgniter v.1.7.x.
Протестирован в CodeIgniter v.1.7.1 и v.1.7.2.
Требования: CodeIgniter 1.7.x
Последняя актуальная версия: 0.03 от 17.09.2010
Скачать: SQLite3 PDO Driver for CodeIgniter by Xintrea v.0.03
Установка:
1. Создаем директорию /pdo в директории /database/drivers, и копируем туда php-файлы из архива.
2. Создаем SQLite3 базу данных, и размещаем ее в нужной нам директории. Например я использую директорию [APPPATH]/db, файл называю base.db (то есть, путь к файлу - /application/db/base.db)
3. В файле [APPPATH]/config/database.php делаем следущие настройки:
...
$db['default']['hostname'] = '';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = 'sqlite:'.APPPATH.'db/base.db';
$db['default']['dbdriver'] = 'pdo';
...
Все, после этого можно использовать функции класса Database или Active Record для работы с базой данных.
Внимание! Если CodeIgniter настроен так, что данные сессии (session) хранятся в базе данных (а не в cookies), то путь к файлу базы нужно указывать абсолютный, то есть с корня. Например:
$db['default']['database'] = 'sqlite:/var/www/mysite/db/base.db';
Это связано с тем, что CI сбрасывает текущую директорию сразу после выполнения деструкторов контроллеров. А сохранение session-данных в базу происходит после завершения работы контроллеров. Поэтому, в момент сохранения сессионных данных, файл базы не может быть найден, если к нему задан относительный путь.
Где применяется этот драйвер?
На этом сайте (webhamster.ru) всегда установлена самая свежая версия драйвера. Несколько российских и зарубежных разработчиков также используют драйвер в своих проектах.
История создания
Использование SQLite3 в CodeIgniter всегда стояло особняком в обсуждениях разработчиков. С одной стороны, SQLite мало интересует профессиональных PHP-разработчиков. С другой стороны, какие-то библиотеки для работы с SQLite вроде бы и были, но находились в полурабочем состоянии.
Версия 0.01
В 2009 году я сделал PDO-драйвер для работы с SQLite3. Делал его, взяв за основу уже существующий класс CI_DB_pdo_driver. Вся работа заключалась в том, чтобы заставить данный класс работать с реалиями SQLite и исключить все ошибки, возникающие из-за особенностей взаимодействия с SQLite-базой. Когда ошибок не стало, и драйвер реально заработал, я его опубликовал (v.0.01).
Версия 0.02
В процессе работы выяснилось, что CodeIgniter по умолчанию для соединения с базой использует так называемое "персистентное" соединение. Но как показала практика, такой режим работы для файл-ориентированных баз неприемлем. А SQLite как раз является файл-ориентированной базой. Поэтому были сделаны небольшие исправления, и в 2010 году появилась версия 0.02.
Версия 0.03
Исправлен результат вызова метода $this->db->count_all_results(), так как подсчет общего количества строк в SQLite отличается от других популярных реализация SQL языка.
Известные проблемы
Драйвер не работает с LIKE функцией. То есть, конструкция вида
$this->db->like('title', 'match');
вызовет ошибку. Для использования SQL-оператора LIKE, можно использовать функцию ActiveRecords where(), например так:
$this->db->where("title LIKE '%match%'");
Пока не знаю, как решить эту проблему, ибо у меня мало опыта работы с SQL-ными базами данных.