От автора: в данном уроке мы рассмотрим простой пример создания собственного класса ООП PHP, для работы с базой данных.
Замечание: данный класс не является эталонным, на который стоит равняться. Цель данного урока показать, как можно все удобно сгруппировать для комфорта создания CMS в будущем.
Прежде чем начать писать класс для работы с базой данных в PHP, мы сначала набросаем его скелет, кстати имя нашего класса будет DBClass.
Во-первых, нам понадобиться два метода:
Во-вторых, в скелет класса войдет группа методов дляредактирование определенных таблиц базы данных. Например, вставка, удаление, выборка – insert, delete, select соответственно. Операции типа редактирование и т.п. будет вам как домашнее задание. Напишите сами, тем самым дополнив базу данных новыми полезными компонентами, то есть методами.
На этом пока все.
Схематический скелет класса DBClass:
В этот метод извне мы будет передавать 4 параметра: хост, имя пользователя, пароль, имя базы данных. Потом присвоим эти переменные аналогичным классовым переменным. И конечно, же вызовем метод открытия соединения сMySQL.
Цель метода состоит в возвращении массива значений выбранных полей в запросе. С полученным массивом в будущем будет намного проще работать. Разберем словесно алгоритм работы метода.
Начало цикла $i
Начало цикла $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;
}
}
Вид полученного массива:
Здесь все очень просто. Давайте вспомним как формируетсязапрос вставки в MySQL. Примерно так: $sql = ‘NSERT INTO table VALUES (……..)’. Конечно, можно ещё указать в какие поля вставлять.
Алгоритм метода просто:
for($i = 0; $i < $numValues; $i++)
{
if(is_string($values[$i])) $values[$i] = '"'.$values[$i].'"';
}
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 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();
?>
<?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, с использованием ООП на практике, теперь дело за вами: сидеть и экспериментировать.