Нужен был класс для работы с SQLite базой данных. Собственно в сети их дофига, но я решил сделать свой В итоге получилось довольно-таки добротно и с плюшками в виде prepare.
Под катом сам класс и рассмотр функций.
Подключение к базе данных происходит следующим способом:
$mydb = new SQLite($file_path [, $auto=true]); |
$file_path — путь до БД
Возвращает false если:
- база уже открыта
- путь до БД не задан
- пусть до БД это не файл
- не удалось открыть базу данных
$auto опция, устаналивающая, открывать БД сразу после создания класса (true), или открывать функцией SQLite::open([$mode]);
SQLite::open([$mode]); |
$mode — не обязательный параметр, устанавливает режим прав доступа на файл.
SQLite::close(); |
Закрывает базу данных.
SQLite::query($query); |
Выполняет запрос к базе данных
$query — запрос (например: SELECT * FROM table)
SQLite::fetch($type); |
Выбирает следующую запись из результата запроса и возвращает массив
$type — тип индексации возвращаемого объекта.
бывает нескольких видов:
- SQLite::ASSOC — ассоциативный массив
- SQLite::NUM — числовой массив
- SQLite::BOTH — числовой и ассоциативный массив
SQLite::fetchAll($type); |
Выбирает все записи из результата запроса и возвращает многомерный массив
$type — тип индексации возвращаемого объекта.
бывает нескольких видов:
- SQLite::ASSOC — ассоциативный массив
- SQLite::NUM — числовой массив
- SQLite::BOTH — числовой и ассоциативный массив
SQLite::last_insert_id(); |
Возвращает идентификатор последней вставленной записи
SQLite::rows(); |
Возвращает количество записей в результате запроса
SQLite::getColumns($table); |
Возвращает массов столбцов таблицы $table
SQLite::getTables(); |
Возвращает все таблицы данной базы данных в виде массива.
escape_string() |
Функция для экранирования символов, которая может быть применена как:
SQLite::escape_string($query); |
Так и в самом запросе:
$query = "SELECT * FROM table WHERE text='escape_string($text)'"; |
SQLite::prepare($query); |
Связывание параметра с указанной переменной. Работает в связке с функцией:
SQLite::bindParam($bind, $string[, $type]); |
$bind — параметр
$string — текст, который будет заменять параметр
$type — тип
Типы бывают разных видов:
- SQLite::IS_INT — числовой
- SQLite::IS_STR — строковый
- регулярное выражение — можно подставить также регулярное выражение
SQLite::execute(); |
Служит для выполнения запроса, если запрос задан через связки параметров.
Также примеры по каждой функции.
Подключение к базе данных, создание таблицы, добавление записи, вывод последнего идентификатора, удаление последней строки и закрытие соединения.
$mydb = new SQLite(ENGINE.'/files/history.db'); $mydb->query("CREATE TABLE history(id INTEGER AUTOINCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id))"); // $mydb->query("INSERT INTO history VALUES(NULL, 'name')"); // $last_id = $mydb->last_insert_id(); echo $last_id; // $mydb->query("DELETE FROM history WHERE id='{$last_id}'"); // $mydb->close(); |
Подключение к базе данных, создание таблицы, добавление записи с параметром, вывод всех записей, закрытие соединения.
$mydb = new SQLite(ENGINE.'/files/history.db'); $mydb->query("CREATE TABLE history(id INTEGER AUTOINCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id))"); // $query = $mydb->prepare("INSERT INTO history VALUES(NULL, :name)"); $query->bindParam(':name', 'John', SQLite::IS_STR); $query->execute(); $result = $mydb->query("SELECT * FROM history")->fetchAll(SQLite::ASSOC); var_dump($result); // $mydb->close(); |
Подключение к базе данных, создание таблицы, получение всех таблиц, получение всех столбцов в таблице, закрытие соединения.
$mydb = new SQLite(ENGINE.'/files/history.db'); $mydb->query("DROP TABLE history"); $mydb->query("CREATE TABLE history(id INTEGER AUTOINCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id))"); // $tables = $mydb->getTables(); $columns = $mydb->getColumns('history'); var_dump($tables); var_dump($columns); // $mydb->close(); |
Подключение к базе данных, создание таблицы, добавление записи + экранирование кавычек специальной функцией escape_string(), закрытие соединения
$mydb = new SQLite(ENGINE.'/files/history.db'); $mydb->query("DROP TABLE history"); $mydb->query("CREATE TABLE history(id INTEGER AUTOINCREMENT, name VARCHAR(128) NOT NULL, adress VARCHAR(128) NOT NULL, PRIMARY KEY(id))"); // $name = 'Jogn1"'; $adress = "Street 10'1"; // $mydb->query("INSERT INTO history VALUES(NULL, 'escape_string($name)', '".SQLite::escape_string($adress)."')"); var_dump($mydb->query("SELECT * FROM history")->fetchAll(ASSOC)); // $mydb->close(); |