Клас для роботи з базою даних
Відео: Відеоурок по створенню класу бази даних PHP ООП використовуючи PDO (4/4)
Нещодавно я помітив, що в Інтернеті можна знайти величезну кількість PHP-класів для роботи з базою даних. Як завжди, вони завжди хизуються своєю функціональністю і кількістю можливостей. Я вирішив теж написати свій клас для роботи з базою даних, але пішов іншим шляхом. Я хотів зробити такий клас, щоб в ньому був той необхідний мінімум функціоналу, який тільки і потрібно. Все інше - це вже незрозумілі навороти, які використовувати, як мінімум, небезпечно.
Наводжу свій прокоментований клас для роботи з базою даних:
Відео: Пишемо клас для роботи з БД MySQL
lt ;?php
classDataBase{
privatestatic $ db =null-// Єдиний екземпляр класу, щоб не створювати безліч підключень
private $ mysqli-// Ідентифікатор з`єднання
private $ sym_query ="{?}"-// "Символ значення в запиті"
/ * Отримання екземпляра класу. Якщо він вже існує, то повертається, якщо його не було, то створюється і повертається (патерн Singleton) * /
publicstaticfunction getDB(){
if(self::$ db ==null)self::$ db =newDataBase() -
returnself::$ db-
}
/ * Private-конструктор, підключається до бази даних, що встановлює локаль і кодування з`єднання * /
privatefunction __construct(){
$ this-gt;mysqli =new mysqli("Localhost","Root","","My_db") -
$ this-gt;mysqli-gt;query("SET lc_time_names = `ru_RU`") -
$ this-gt;mysqli-gt;query("SET NAMES `utf8`") -
}
/ * Допоміжний метод, який замінює "символ значення в запиті" на конкретне значення, яке проходить через "функції безпеки" * /
privatefunction getQuery($ query, $ params){
if($ params){
for($ i =0- $ i lt; count($ params) - $ i++){
$ pos = strpos($ query, $ this-gt;sym_query) -
$ arg =" `".$ this-gt;mysqli-gt;real_escape_string($ params[$ i])." `"-
$ query = substr_replace($ query, $ arg, $ pos, strlen($ this-gt;sym_query)) -
}
}
return $ query-
}
/ * SELECT-метод, який повертає таблицю результатів * /
publicfunctionselect($ query, $ params =false){
$ result_set = $ this-gt;mysqli-gt;query($ this-gt;getQuery($ query, $ params)) -
if(!$ result_set)returnfalse-
return $ this-gt;resultSetToArray($ result_set) -
}
/ * SELECT-метод, який повертає один рядок з результатом * /
publicfunction selectRow($ query, $ params =false){
$ result_set = $ this-gt;mysqli-gt;query($ this-gt;getQuery($ query, $ params)) -
if($ result_set-gt;num_rows !=1)returnfalse-
elsereturn $ result_set-gt;fetch_assoc() -
}
/ * SELECT-метод, який повертає значення з конкретної комірки * /
publicfunction selectCell($ query, $ params =false){
$ result_set = $ this-gt;mysqli-gt;query($ this-gt;getQuery($ query, $ params)) -
if((!$ result_set)||($ result_set-gt;num_rows !=1))returnfalse-
else{
$ arr = array_values($ result_set-gt;fetch_assoc()) -
return $ arr[0] -
}
}
/ * НЕ-SELECT методи (INSERT, UPDATE, DELETE). Якщо запит INSERT, то повертається id останньої вставленої записи * /
publicfunction query($ query, $ params =false){
$ success = $ this-gt;mysqli-gt;query($ this-gt;getQuery($ query, $ params)) -
if($ success){
if($ this-gt;mysqli-gt;insert_id ===0)returntrue-
elsereturn $ this-gt;mysqli-gt;insert_id-
}
elsereturnfalse-
}
/ * Перетворення result_set в двовимірний масив * /
privatefunction resultSetToArray($ result_set){
$ array = array() -
while(($ row = $ result_set-gt;fetch_assoc())!=false){
$ array[]= $ row-
}
return $ array-
}
/ * При знищенні об`єкта закривається з`єднання з базою даних * /
publicfunction __destruct(){
if($ this-gt;mysqli) $ this-gt;mysqli-gt;close() -
}
}
?gt;
Як бачите, немає нічого зайвого, тільки все найнеобхідніше. тепер розберемо PHP-код, який використовує даний клас:
lt ;?php
$ db =DataBase::getDB() -// Створюємо об`єкт бази даних
$ query ="SELECT * FROM` users` WHERE `id` gt; {?} AND `online` = {?}"-
$ table = $ db-gt;select($ query, array(10,1)) -// Запит явно повинен вивести таблицю, тому викликаємо метод select ()
$ query ="SELECT` login` FROM `users` WHERE` email` = {?} "-
$ login = $ db-gt;selectCell($ query, array("[email protected]")) -// Запит повинен вивести конкретну осередок, тому викликаємо метод selectCell ()
?gt;
Тепер Ви розумієте, що для зручної та безпечної роботою з базою даних зовсім не потрібно бібліотека з 100 класів. Все необхідне є, і даний клас без проблем обробить будь-який запит. Єдине, що я рекомендую - це налаштування винести в окремий клас. Тобто адреса хоста, ім`я користувача, пароль, назва бази даних, кодування, локаль і "символ значення" винести в окремий клас, звідки їх зчитувати.
Відео: PHP Для початківця. Робота з Базою даних. частина 10
Ось такий нехитрий клас для роботи з базою даних я використовую в своїх проектах.
- Відеоурок - вибірка даних з бази даних
- Як правильно створювати структуру бази даних
- Як створити об`єкт по імені класу в php
- Як отримати список дочірніх вузлів через dom
- Як створити движок для сайту
- Абстрактні класи в php
- Метод tostring () в php
- Вивчаємо coffeescript. Класи.
- Клас для відправки e-mail на php
- Reflection api. Reflectionclass.
- Створення винятків в php
- Статичні властивості і методи в php
- Шаблон проектування "одинак" (pattern singleton).
- Створення класу в php
- Підключення до бази даних в php
- Reflection api. Reflectionmethod.
- Помилка max user connections в mysql
- Створюємо сокращатель url. Частина 2.
- Автоматичне резервне копіювання на php
- Створення движка на mvc. Починаємо роботу з базою даних.
- Спадкування класів в php