От автора: в данном уроке мы рассмотрим простой пример создания собственного класса ООП 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() готов.
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 запрос.
- Далее в цикле мы немного изменяем вид значений, которые передались извне через параметры функции.
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;
}
}
}
Простая демонстрация использования класса
<?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 целиком
<?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, с использованием ООП на практике, теперь дело за вами: сидеть и экспериментировать.
Комментрии
Комементариев нет, будьте первыми....