PHP PDO mysql class vs Memcache

Люба х...ня

php pdo mysq class

Решил поделиться драйвером, который мы используем для работы с БД MySQL. Класс является расширением PDO и включает в себя готовые функции для работы с основными операциями CRUD. Работает по паттерну singleton. Основная задача: уменьшить количество ошибок при рутинных операциях и уменьшить количество кода.

Подключение.

Достаточно его скопировать в папку с классами, и если вы следуете psr-0, тогда ваш __autoload должен его загрузить.

Настройка соединения с БД.

В конструкторе класса есть $_config. Его желательно заменить своим или подставить свои значения.

Содержимое конфига понятно. Думаю описывать не стоит.

 $_config = array(
            'host'      => 'localhost',
            'username'  => 'root',
            'password'  => ",
            'db'        => 'you db name',
            'memcached' => false,
            'mc_host'   => 'localhost'
        );

Единственное если вы хотите использовать memcache, тогда укажите mc_host. Если память используется с локального сервера, тогда достаточно прописать localhost.

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

SELECT

$db = DB::instance();
$r = $db->select("select id,name,is_folder from menu order by id asc")->all();
Результат:
Array
(
[0] => Array
(
[id] => 1
[name] => О проекте
[title] => О проекте
)

[1] => Array
(
[id] => 2
[name] => История
[title] => История
)

)

$r = $db->select("select name,is_folder from menu where id=1")->row();
Результат:
(
[name] => О проекте
[title] => О проекте
)
$r = $db->select("select name from menu where id=1")->row('name');
Результат:
О проекте

Также у метода select есть второй паратетр $debug. Если передать true | 1 тогда перед осуществлением запроса выведется дамп sql.

INSERT

Было:

INSERT INTO `menu` (`id`, `name`, `title`) VALUES (NULL, 'О проекте', 'О проекте');

Стало:

$db->insert(
    'menu',
    array(
        'name' => 'О проекте',
        'title'=> 'О проекте',
    )
);

Вероятность ошибки уменьшена. И все экранируется автоматически

UPDATE
UPDATE `menu` SET `title` = 'История 1' WHERE `menu`.`id` =2;
$db->update('menu', array('title'=> 'История 1'), 'id=2');

При малом количестве полей разницу не видно. Но. Если для примера в массив $_POST['menu'] внести данные для вставки из формы, тогда можно расширять форму полями и не волноваться об обработчике

$db->update('menu', $_POST['menu'], 'id=2');

Чувствуете преимущество?!

DELETE

DELETE FROM `menu` WHERE `menu`.`id` = 2
$db->delete('menu', 'id=2');
$db->delete('menu', 'id=2 limit 1');

Можно было делать метод limit, но незнаю стоит ли.

MEMCACHE

Если вам необходимо использовать memcache, достаточно перед запросом включить следующее:

$db = DB::instance();
$db->useCache(1, 3600);
$r = $db->select("select id,name,title from menu order by id asc")->all();
или
$db = DB::instance()->useCache(1, 3600);
$r = $db->select("select id,name,title from menu order by id asc")->all();
то есть вы можете менять время жизни кэша.

Это только перечень базовых методов, которые присутствуют в классе. Далее открываете код и смотрите на все возможности.
Благодарю за внимание. Кому пригодилось не забываем лайкать.

И напоследок. Код на github.

Расскажите нам о своем проекте!