Створюємо клас для роботи з базою даних в PHP

17

Від автора: у даному уроці ми розглянемо простий приклад створення власного класу ООП в PHP для роботи з базою даних.

Зауваження: цей клас не є еталонним, на який варто рівнятися. Мета даного уроку показати, як можна все зручно згрупувати для комфорту створення CMS в майбутньому.

Скелет класу PHP для роботи з базою даних

Перш ніж почати писати клас для роботи з базою даних в PHP, ми спочатку набросаєм його скелет, до речі ім’я нашого класу буде DBClass.

По-перше, нам знадобитися два методу:

для того, щоб з’єднатись з базою;

для дисконнекта з базою.

По-друге, в скелет класу увійде група методів дляредактирование визначених таблиць бази даних. Наприклад, вставка, видалення, вибірка – insert, delete, select відповідно. Операції типу редагування і т. п. буде вам як домашнє завдання. Напишіть самі, тим самим доповнивши базу даних новими корисними компонентами, тобто методами.

На цьому поки все.

Схематичний скелет класу DBClass:

function__construct(); (метод, який викликається автоматично при створенні класу)

function openConnection();

select function();

insert function();

function delete();

function closeConnection();

Пишемо метод __construct();

В цей метод ззовні ми буде передавати 4 параметри: хост, ім’я користувача, пароль, ім’я бази даних. Потім присвоїмо ці змінні аналогічним класовим змінним. І звичайно, ж викличемо метод відкриття з’єднання сMySQL.

метод select();

Мета методу полягає у поверненні масиву значень вибраних полів у запиті. З отриманим масивом в майбутньому буде набагато простіше працювати. Розберемо словесно алгоритм методу.

Оголошуємо змінну $fetched як масив, в якому буде зберігатися значення вибраних полів у запиті.

Формуємо запит ($sql) в MySQL і відправляємо його mysql_query($sql)

Початок циклу $i

Далі у нас йде цикл for, в якому ми перебираємо вибрані з MySQL рядки по черзі. Кількість рядків дізнаємося за допомогою функції mysql_num_rows()

У циклі ми по черзі робимо результуючий ряд (рядок) як асоціативний масив, з якого відразу ж повертаємо всі ключі масиву в змінну $key

Вважаємо кількість елементів масиву $key ($numKeys = count($key);)

Початок циклу $x

Далі йде цикл, в якому ми формуємо кінцевий масив значень вибраних полів у запиті.

Кінець циклу $x

Кінець циклу $i

Далі else(елсами) повертаємо при невдачі false до відповідних ифам (if).

Метод select() готовий.

public function select($what,$from,$where = null,$order = null)
{ $fetched = array();
$sql = ‘SELECT ‘.$what.’ FROM ‘.$from;
if($where != null) $sql .= ‘WHERE ‘.$where;
if($order != null) $sql .= ‘ORDER BY ‘.$order;
$query = mysql_query($sql);
if($query)
{
$rows = mysql_num_rows($query);
for($i = 0; $i < $rows; $i++)
{
$results = mysql_fetch_assoc($query);
$key = array_keys($results);
$numKeys = count($key);
for($x = 0; $x < $numKeys; $x++)
{
$fetched[$i][$key[$x]] = $results[$key[$x]];
}
}
return $fetched;
}
else
{
return false;
}
}

Вид отриманого масиву:

Створюємо клас для роботи з базою даних в PHP

метод insert();

Тут все дуже просто. Давайте згадаємо як формируетсязапрос вставки в MySQL. Приблизно так: $sql = ‘NSERT INTO table VALUES (……..)’. Звичайно, можна ще вказати в які поля вставляти.

Алгоритм методу просто:

Спочатку ми формуємо сам SQL запит.

Далі в циклі ми трохи змінюємо вигляд значень, які передалися ззовні через параметри функції.

for($i = 0; $i < $numValues; $i++)
{
if(is_string($values[$i])) $values[$i] = ‘»‘.$values[$i].'»‘;
}

тепер перетворюємо масив $values в рядок, розділяючи елементи масиву коми.

далі mysql_query($insert) і перевірка на істинність виконання запиту.

public function insert($table,$values,$rows = null)
{
$insert = ‘INSERT INTO ‘.$table;
if($rows != null)
{
$insert .= ‘(‘.$rows.’)’;
}
$numValues = count($values);
for($i = 0; $i < $numValues; $i++)
{
if(is_string($values[$i])) $values[$i] = ‘»‘.$values[$i].'»‘;
}
$values = implode(‘,’,$values);
$insert .= ‘VALUES (‘.$values.’)’;
$ins = mysql_query($insert);
return ($ins) ? true : false;
}

метод delete();

Припускаючи, що тут і так все ясно. Робимо по аналогії з попередніми методами. + до того ж тут не так вже й багато коду.

метод closeConnection();

Метод, при виклику якого закривається з’єднання з Базою Даних.

Спочатку ми перевіряємо на істинність, відкрито з’єднання.

Якщо відкрито, закриваємо його і ставимо ідентифікатором з’єднання значення false і повертаємо значення методу true.

public function closeConnection()
{
if($this->db)
{
if(@mysql_close())
{
$this->db = false;
return true;
}
else
{
return false;
}
}
}

Проста демонстрація використання класу

select(‘*’,’names’);
echo»;
print_r($names);
echo»;
//$db->insert(‘names’, array(‘NULL’,’Влад’));
$db->closeConnection();
?>

Файл dbclass.php цілком

server = $server;
$this->user = $user;
$this->pass = $pass;
$this->dbname = $dbname;
$this->openConnection();
}
public function openConnection()
{
if(!$this->db)
{
$connection = @mysql_connect($this->server,$this->user,$this->pass);
if($connection)
{
$selectDB = @mysql_select_db($this->dbname,$connection);
if($selectDB)
{
$this->db = true;
mysql_query(‘SET NAMES UTF8’);
return true;
}
else
{
return false;
}
} else
{
return false;
}
} else
{
return true;
}
}
public function select($what,$from,$where = null,$order = null)
{ $fetched = array();
$sql = ‘SELECT ‘.$what.’ FROM ‘.$from;
if($where != null) $sql .= ‘WHERE ‘.$where;
if($order != null) $sql .= ‘ORDER BY ‘.$order;
$query = mysql_query($sql);
if($query)
{
$rows = mysql_num_rows($query);
for($i = 0; $i < $rows; $i++)
{
$results = mysql_fetch_assoc($query);
$key = array_keys($results);
$numKeys = count($key);
for($x = 0; $x < $numKeys; $x++)
{
$fetched[$i][$key[$x]] = $results[$key[$x]];
}
}
return $fetched;
}
else
{
return false;
}
}
public function insert($table,$values,$rows = null)
{
$insert = ‘INSERT INTO ‘.$table;
if($rows != null)
{
$insert .= ‘(‘.$rows.’)’;
}
$numValues = count($values);
for($i = 0; $i select(‘*’,’names’);
echo»;
print_r($names);
echo»;
//$db->insert(‘names’, array(‘NULL’,’Влад’));
$db->closeConnection();
?>

Підсумок

Ось ми і розглянули приклад створення класу, для роботи з базою даних в PHP, з використанням ООП на практиці, тепер справа за вами: сидіти і експериментувати.

Всього доброго. З повагою Павук Владислав.

E-mail: [email protected]