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