От автора: в данном уроке мы рассмотрим простой пример создания собственного класса ООП PHP, для работы с базой данных.
Замечание: данный класс не является эталонным, на который стоит равняться. Цель данного урока показать, как можно все удобно сгруппировать для комфорта создания CMS в будущем.
Скелет класса PHP для работы с базой данных
Прежде чем начать писать класс для работы с базой данных в PHP, мы сначала набросаем его скелет, кстати имя нашего класса будет DBClass.
Во-первых, нам понадобиться два метода:
для того, чтобы соединится с базой;
для дисконнекта с базой.
Во-вторых, в скелет класса войдет группа методов дляредактирование определенных таблиц базы данных. Например, вставка, удаление, выборка – insert, delete, select соответственно. Операции типа редактирование и т.п. будет вам как домашнее задание. Напишите сами, тем самым дополнив базу данных новыми полезными компонентами, то есть методами.
На этом пока все.
Схематический скелет класса DBClass:
function__construct(); (метод, который вызывается автоматически, при создании класса)
function openConnection();
function select();
function insert();
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() готов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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; } } |
Вид полученного массива:
метод insert();
Здесь все очень просто. Давайте вспомним как формируетсязапрос вставки в MySQL. Примерно так: $sql = ‘NSERT INTO table VALUES (……..)’. Конечно, можно ещё указать в какие поля вставлять.
Алгоритм метода просто:
Сначала мы формируем сам SQL запрос.
Далее в цикле мы немного изменяем вид значений, которые передались извне через параметры функции.
1 2 3 4 |
for($i = 0; $i < $numValues; $i++) { if(is_string($values[$i])) $values[$i] = '"'.$values[$i].'"'; } |
теперь превращаем массив $values в строку, разделяя элементы массива запятой.
далее mysql_query($insert) и проверка на истинность выполнения запроса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function closeConnection() { if($this->db) { if(@mysql_close()) { $this->db = false; return true; } else { return false; } } } |
Простая демонстрация использования класса
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // из файла config.php к примеру define('SERVER','localhost'); define('USER','root'); define('PASS',''); define('DBNAME','dbclass'); // $db = new DBClass(SERVER,USER,PASS,DBNAME); $names = $db->select('*','names'); echo'<pre>'; print_r($names); echo' |
’;
//$db->insert(‘names’, array(‘NULL’,’Влад’));
$db->closeConnection();
?>
Файл dbclass.php целиком
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
<?php define('SERVER','localhost'); define('USER','root'); define('PASS',''); define('DBNAME','dbclass'); classDBCLass { private $server,$user,$pass,$dbname,$db; function __construct($server,$user,$pass,$dbname) { $this->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 < $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; } public function delete($table,$where = null) { $sql = 'DELETE FROM '.$table.' WHERE '.$where; if($where == null) { $sql = 'DELETE '.$table; } $deleted = @mysql_query($sql); return ($deleted)? true : false; } } $db = new DBClass(SERVER,USER,PASS,DBNAME); $names = $db->select('*','names'); echo'<pre>'; print_r($names); echo' |
’;
//$db->insert(‘names’, array(‘NULL’,’Влад’));
$db->closeConnection();
?>
Итог
Вот мы и рассмотрели пример создания класса, для работы с базой данных в PHP, с использованием ООП на практике, теперь дело за вами: сидеть и экспериментировать.
Всего доброго. С уважением Паук Владислав.
Автор: Влад Паук
Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.
E-mail: contact@webformyself.com
Комментарии (10)