Главная / Мой вордпресс / Абстракция в Mysql

Абстракция в Mysql

Абстракция в MysqlДобрый день!

Сегодня очередной пост, связанный с Mysql.

Для начала разберемся с самим понятием “абстракция базы данных”.

Абстракция базы данных – программный код, основная цель которого еще “упростить жизнь разработчику”.

Рассмотрим на примере данное понятие.

При использовании абстракции БД вам придется меньше “ручками писать”, а в итоге получим один и тот же результат.

Вы должны понимать, что при использовании абстракции получение выборки будет происходить чуть медленнее, но вы разницу во времени не заметите.

Я сегодня решил рассмотреть простой класс (по сравнению с Ado db), который реализует абстракцию mysql.

Вы должны понимать, что в идеале абстракция не пишется конкретно под отдельную бд, а пишется в основном под множество баз с большим спектром решений.

Мы просто рассмотрим частный случай для нашей любимой Mysql.

Для начала установим в файле настройки доступа к базе.

Настройки доступа к базе:

$db_host – имя сервера;

$db_user – логин;

$db_pass – пароль;

$db_dbname – имя базы;

Данные параметры основные, которые надо будет заполнить!

Теперь рассмотрим, как нам работать с данным классом.

Для начала нам надо подключится к базе данных:

error_reporting(E_ALL);

ini_set(display_errors, 1);

require(«bd.php»);

$db=new Mysql();

if(!$db)

{

echo(«Произошла ошибка:».$db->Error());

}

Теперь научимся закрывать соединение с базой.

В документации написано, что соединение закрывать не надо, закрытие соединения делается автоматически, после того, как скрипт выполнится на странице.

С открытием, закрытием соединения разобрались давайте разберемся с выборкой данных, тобиш Select.

Вы понимаете, что мы можем создать выборку на основе Sql,а можем пользоваться встроенными функциями нашего класса.

Будем рассматривать работу mysql класса на основе простой базы данных.

Sql запрос на создание “тестовой базы”

CREATE DATABASE test;

CREATE TABLE `data` (

`id` int(5) NOT NULL auto_increment,

`text` varchar(32) collate utf8_bin NOT NULL,

PRIMARY KEY  (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ;

INSERT INTO `data` VALUES(1, first);

INSERT INTO `data` VALUES(2, second);

INSERT INTO `data` VALUES(3, third );

INSERT INTO `data` VALUES(4, fourth);

INSERT INTO `data` VALUES(5, fifth);

Самый простой способ выборки (аналог mysql)query())

$sql = «SQL запрос»;

$results = $db->Query($sql);

Для того чтобы получить сразу массив значений на основе выборки

$sql = «SQL запрос»;

$results = $db->QueryArray($sql);

На выходе получаем массив)

Также мы можем выбрать одну запись или значение, не прибегая к sql способу через limit

$query=»select text from data»;

$result=$db->QuerySingleValue($query);

Результат работы:

first

Получается, выводит первое значение), по такому принципу работает функция QuerySingleRow.

Разница состоит только, в том, что будет вывод целой записи, а не одного значения.

Мы можем задать, какую таблицу нам надо выбрать:

$db->SelectTable(«data»);

Для получения количества записей, которые были затронуты при последней выборке надо:

echo $db->RowCount() ;

Есть хороший вариант просмотра последних затронутых записей через цикл:

while ($row = $db->Row()) {

echo $row->id;

}

С выборкой данных чуток разобрались)

Перейдем теперь к Inserty значений.

Для начала создадим массив, в который запишем значения в формате: “ключ-значение”, и потом используем функцию для вставки значений:

$insert_row=$db->InsertRow(«data», array(id=>»   «,text=>» sixth «));

Обратите внимание на кавычки!

Обновление данных происходит таким же образом:

$update=array(text=>»eight»);

$filter=array(id=>»11″);

$update_row=$db->UpdateRows(«data», $update, $filter);

Мы указываем в массиве filter, какую запись надо обновить (то есть мы указываем значение какого-то поля таблицы, по которому можно найти запись, которую хотим обновить), а в массиве update данные, на которые хотим обновить.

Удаление записей происходит по такому же принципу:

$delete_row=$db->DeleteRows(«data», array(id=>» 11″));

Теперь давайте рассмотрим, как можно обработать ошибки “силами класса”.

1.Использую $db->Error();

2.try()…catch();

3.$db->Kill()

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

Получается если возникает ситуацию, когда метод Kill() выполняется, тогда сразу останавливается выполнение скрипта.

Осталось рассмотреть еще одну очень интересную возможность (можно засечь время за сколько выполнится запрос):

$db->TimerStart();

$query=»select * from data»;

$results = $db->Query($query);

$db->TimerStop();

echo($db->TimerDuration() . » Миллисекунд»);

У меня была идея сравнить время выполнения запроса через абстракцию и, не используя “лишний слой программного кода”, но потом подумал, что разница будет очень маленькая)

В принципе, вот и всё.

Лично для я данный класс буду использовать дальше в моих скриптах, очень удобно им пользоваться.

Вам может показаться, что в маленьких скриптах смысла использования абстракции нету, но в больших скриптах или своих CMS есть смысл использовать.

А, вы как думаете?

Надеюсь, данная информация была для вас полезна.

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*