PHP PDO mysql class vs Memcache
- 19 Ноября 2014
- Volodymyr Hodiak
- Разработка
- Администрирование
- 5030
Решил поделиться драйвером, который мы используем для работы с БД 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.