Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Связанные запросы




Использование SQLite

Процедурный интерфейс к SQLite почти такой же, как у MySQL и других расширений БД. По большей части переход к SQLite потребует только изменить mysql/pq/etc... префикс функции на sqlite.

 

<?php

// создаём новую базу (процедурный интерфейс)

$db = sqlite_open("db.sqlite");

// создаём таблицу foo

sqlite_query($db, "CREATE TABLE foo (id INTEGER PRIMARY KEY, name CHAR(255))");

// добавляем что-нибудь для примера

sqlite_query($db, "INSERT INTO foo (name) VALUES ('Ilia')");

sqlite_query($db, "INSERT INTO foo (name) VALUES ('Ilia2')");

sqlite_query($db, "INSERT INTO foo (name) VALUES ('Ilia3')");

// выполняем запрос

$result = sqlite_query($db, "SELECT * FROM foo");

// проходим в цикле выборкой по ячейкам

while ($row = sqlite_fetch_array($result)) {

print_r($row);

/* каждый результат будет выглядеть примерно так

Array

(

[0] => 1

[id] => 1

[1] => Ilia

[name] => Ilia

)

*/

}

// закрываем соединение с базой

sqlite_close($db);

?>

Собственно значительные отличия между SQLite и другими базами данных находятся в самом движке. В отличие от других БД в SQLite нет привязки к типам; все данные сохраняются как строки оканчивающиеся символом NULL, что лучше, чем двоичное представление данных в столбцах специального типа. По причине совместимости SQLite пока поддерживаеттип спецификации в конструкциях CREATE TABLE, например, такой как INT, CHAR, FLOAT, TEXT и тому подобные, но реально их не использует. Внутри базы, SQLite только делает различие между строковыми и целочисленными данными во время сортировки.

Поэтому, если вы не собираетесь сортировать данные, вы можете обойтись без указания специального типа полей при создании таблиц в SQLite.

"Безтиповая природа" SQLite делает сортировку и сопоставление данных в некотором роде медленнее, так как каждый раз SQLite будет вынуждена определять тип данных и применять либо строковый механизм сортировки/сравнения либо числовой. SQL таблицы часто требуют автоматически присваиваемый ключ для быстрого доступа к ячейкам, подразумевая возврат ссылки на последнюю добавленную ячейку. Для SQLite этот синтаксис, мягко говоря, бесполезен. Чтобы создать такую таблицу, вам понадобится объявить поле как INTEGER PRIMARY KEY, что более удобно чем указание специализированного типа или присваивание дополнительных свойств, которые указывают на то, что поле является автоинкрементным.

Как вы можете ожидать, SQLite несёт в себе много новых особенностейу лучшающих исполнение и расширяющих функциональность. Одна из таких особенностей - возможность выполнять связанные запросы, которые подразумевают выполнение множественных запросов через функцию выполнения одного запроса. Это снижает количество задействованных функций PHP и таким образом увеличивает скорость работы скрипта. А также позволяет вам легко группировать блоки запросов внутри транзакций, улучшая выполнение в дальнейшем.

Такая возможность может быть значительным фактором во время выполнения множественных обращений на запись в базу. Однако существует несколько пикантных особенностей, о которых не следует забывать.

Если какой-либо запрос в SQLite использует что-то введённое пользователем напрямую, вам следует предпринять дополнительные меры предосторожности для проверки такого ввода, чтобы пресечь нежелательный запрос.

В противоположность MySQL, где такое может повлечь за собой лишь недоразумение при запросе к БД и выдать ошибку, в SQLite это позволит атакующему выполнить какой-нибудь запрос на вашем сервере с возможными плачевными последствиями. Если вы добавляете записи через блок запросов и хотели бы возвращать идентификатор, то sqlite_last_insert_rowid() хорошо справится с такой задачей, но вернёт идентификатор только последней записи.

С другой стороны, при попытке определить какое количество ячеек было изменено используя sqlite_changes(), мы получим результат, содержащий общее число ячеек изменённых всеми выполненными запросами. Если ваш блок запросов содержит SELECT, убедитесь что это самый первый запрос, в противном случае ваша окончательная выборка не будет содержать ячеек, возвращаемых этим запросом.

<?php

// создаём новую базу только в памяти

$db = new sqlite_db(":memory:");

// создаём таблицу из двух столбцов bar и добавляем в неё 2 ячейки

/* Чтобы улучшить выполнение, весь блок запроса сгруппирован внутри

транзакции. */

$db->query("BEGIN;

CREATE TABLE bar (id INTEGER PRIMARY KEY, id2);

INSERT INTO bar (id2) VALUES(1);

INSERT INTO bar (id2) VALUES(2);

COMMIT;");

// напечатает "2 insert queries"

echo $db->changes()." insert queries\n";

// напечатает: "last inserted row id: 2"

echo "last inserted row id: ".$db->last_insert_rowid();

?>




Поделиться с друзьями:


Дата добавления: 2014-12-10; Просмотров: 467; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.