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.

Розкажіть нам про свій проект!