Нужен был класс для работы с SQLite базой данных. Собственно в сети их дофига, но я решил сделать свой В итоге получилось довольно-таки добротно и с плюшками в виде prepare.
Под катом сам класс и рассмотр функций.
Подключение к базе данных происходит следующим способом:
$mydb = new SQLite($file_path [, $auto=true]);
$file_path — путь до БД
Возвращает false если:
- база уже открыта
- путь до БД не задан
- пусть до БД это не файл
- не удалось открыть базу данных
$auto опция, устаналивающая, открывать БД сразу после создания класса (true), или открывать функцией SQLite::open([$mode]);
$mode — не обязательный параметр, устанавливает режим прав доступа на файл.
Закрывает базу данных.
Выполняет запрос к базе данных
$query — запрос (например: SELECT * FROM table)
Выбирает следующую запись из результата запроса и возвращает массив
$type — тип индексации возвращаемого объекта.
бывает нескольких видов:
- SQLite::ASSOC — ассоциативный массив
- SQLite::NUM — числовой массив
- SQLite::BOTH — числовой и ассоциативный массив
Выбирает все записи из результата запроса и возвращает многомерный массив
$type — тип индексации возвращаемого объекта.
бывает нескольких видов:
- SQLite::ASSOC — ассоциативный массив
- SQLite::NUM — числовой массив
- SQLite::BOTH — числовой и ассоциативный массив
SQLite::last_insert_id();
Возвращает идентификатор последней вставленной записи
Возвращает количество записей в результате запроса
SQLite::getColumns($table);
Возвращает массов столбцов таблицы $table
Возвращает все таблицы данной базы данных в виде массива.
Функция для экранирования символов, которая может быть применена как:
SQLite::escape_string($query);
Так и в самом запросе:
$query = "SELECT * FROM table WHERE text='escape_string($text)'";
Связывание параметра с указанной переменной. Работает в связке с функцией:
SQLite::bindParam($bind, $string[, $type]);
$bind — параметр
$string — текст, который будет заменять параметр
$type — тип
Типы бывают разных видов:
- SQLite::IS_INT — числовой
- SQLite::IS_STR — строковый
- регулярное выражение — можно подставить также регулярное выражение
Служит для выполнения запроса, если запрос задан через связки параметров.
Также примеры по каждой функции.
Подключение к базе данных, создание таблицы, добавление записи, вывод последнего идентификатора, удаление последней строки и закрытие соединения.
$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();