Ответов: 5 Просмотров: 288
|
Написал класс. Нужна помощь по оптимизации. Надеюсь на вашу отзывчивость и критику.
В конце кода представлены примеры, на основе которых можно понять на что способен класс ( к сожалению, не умею писать документацию к функциям ).
------ > С подсветкой
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP class DBConnection { private $connection; private $database; private $log; public function __construct($server, $port, $username, $password, $database = null) { $this -> connection['server'] = $server; $this -> connection['port'] = $port; $this -> connection['username'] = $username; $this -> connection['password'] = $password; $this -> database['name'] = $database; $this -> open_connection(); } private function open_connection() { $this -> connection['server'].':'. $this -> connection['port'], $this -> connection['username'], $this -> connection['password'] ); if (!empty($this -> database['name'])) { $this -> database['name'], $this -> connection['resourse_identifier'] ); } else { $this -> database['status'] = false; } } private function query($sql) { if ($query = mysql_query($sql, $this -> connection['resourse_identifier'])) { $this -> log['query'][] = $query; return $query; } else { return false; } } public function select($what, $from, $where = null, $order_by = null, $limit = null, $flag = MYSQL_ASSOC) { $sql .= ' from `'.((is_array($from)) ? implode('`, `', $from) : $from).'`'; { } { $sql .= ' order by '.$order_by; } { $sql .= ' limit '.$limit; } $sql .= ';'; $query = $this -> query($sql); { $fetched[] = $row; } return $fetched; } public function insert($table, $values) { if ($i == count($values)) { $keys = '('.implode(', ', $keys).')'; } else $keys = ''; $sql = 'insert into '.$table.$keys.' values '; $sql .= ';'; if ($this -> query($sql)) { return true; } else { return false; } } public function update($table, $sets, $where = null) { $sql = 'update '.$table; $sql .= ' set '; { $i = 0; while (list($setKey, $setValue) = each($sets)) { $sql .= $setKey.' = '.$setValue; if (++$i < count($sets)) $sql .= ', '; } } else $sql .= $sets; { $i = 0; foreach ($where as $where_value) { $sql .= $where_value; if (++$i < count($where)) $where .= ', '; } } else $sql .= $where; $sql .= ';'; if ($this -> query($sql)) { return true; } else { return false; } } public function drop_table($table) { $this -> query('drop '.$table); } } define('SERVER', 'localhost'); define('DATABASE_NAME', 'todolist'); //construct $sql = new DBConnection(SERVER, PORT, USERNAME, PASSWORD, DATABASE_NAME); //insert $sql -> insert("blocks", array('null', '3', '4')); //insert into blocks values (null, 3, 4); $sql -> insert("blocks", array('name' => '1', 'position' => '2')); //insert into blocks(name, position) values (1, 2); //select $sql -> select('*', 'lines'); //select * from `lines`; $sql -> select(array('mission', 'status'), 'lines'); //select mission, status from `lines`; $sql -> select(array('mission', 'status', 'blockId'), 'lines', array('priority = 1', 'id <> 1')); //select mission, status, blockId from `lines` where priority = 1, id <> 1; $sql -> select(array('mission', 'status', 'blockId'), 'lines', null, 'status'); //select mission, status, blockId from `lines` order by status; $sql -> select(array('mission', 'status', 'blockId'), 'lines', null, null, '0, 100'); //select mission, status, blockId from `lines` limit 0, 100; //update $sql -> update('lines', 'col_name1 = expr1'); //update lines set col_name1 = expr1; $sql -> update('lines', array('col_name1 = expr1', 'col_name2 = expr2')); //update lines set col_name1 = expr1, col_name2 = expr2; ?>
------ > Без подсветки :
Спойлер (Отобразить)
<?php
class DBConnection
{
private $connection;
private $database;
private $log;
public function __construct($server, $port, $username, $password, $database = null)
{
$this -> connection['server'] = $server;
$this -> connection['port'] = $port;
$this -> connection['username'] = $username;
$this -> connection['password'] = $password;
$this -> database['name'] = $database;
$this -> open_connection();
}
private function open_connection()
{
$this -> connection['resourse_identifier'] = mysql_connect (
$this -> connection['server'].':'.
$this -> connection['port'],
$this -> connection['username'],
$this -> connection['password']
);
if (!empty($this -> database['name']))
{
$this -> database['status'] = mysql_select_db (
$this -> database['name'],
$this -> connection['resourse_identifier']
);
}
else
{
$this -> database['status'] = false;
}
}
private function query($sql)
{
if ($query = mysql_query($sql, $this -> connection['resourse_identifier']))
{
$this -> log['query'][] = $query;
return $query;
}
else
{
$this -> log['error'][] = mysql_error();
return false;
}
}
public function select($what, $from, $where = null, $order_by = null, $limit = null, $flag = MYSQL_ASSOC)
{
$fetched = array();
$sql = 'select '.((is_array($what)) ? implode(', ', $what) : $what);
$sql .= ' from `'.((is_array($from)) ? implode('`, `', $from) : $from).'`';
if (!empty($where))
{
$sql .= ' where '.((is_array($where)) ? implode(', ', $where) : $where);
}
if (!empty($order_by))
{
$sql .= ' order by '.$order_by;
}
if (!empty($limit))
{
$sql .= ' limit '.$limit;
}
$sql .= ';';
$query = $this -> query($sql);
while ($row = mysql_fetch_array($query, $flag))
{
$fetched[] = $row;
}
return $fetched;
}
public function insert($table, $values)
{
$keys = array_keys($values);
$i = 0; while ($i < count($keys) && is_string($keys[$i])) $i++;
if ($i == count($values))
{
$keys = '('.implode(', ', $keys).')';
}
else $keys = '';
$sql = 'insert into '.$table.$keys.' values ';
$sql .= '('.((is_array($values)) ? implode(', ', $values) : $values).')';
$sql .= ';';
if ($this -> query($sql))
{
return true;
}
else
{
return false;
}
}
public function update($table, $sets, $where = null)
{
$sql = 'update '.$table;
$sql .= ' set ';
if (is_array($sets))
{
$i = 0; while (list($setKey, $setValue) = each($sets))
{
$sql .= $setKey.' = '.$setValue;
if (++$i < count($sets)) $sql .= ', ';
}
}
else $sql .= $sets;
if (!empty($where))
{
$i = 0; foreach ($where as $where_value)
{
$sql .= $where_value;
if (++$i < count($where)) $where .= ', ';
}
}
else $sql .= $where;
$sql .= ';';
if ($this -> query($sql))
{
return true;
}
else
{
return false;
}
}
public function drop_table($table)
{
$this -> query('drop '.$table);
}
}
define('SERVER', 'localhost');
define('PORT', 3306);
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE_NAME', 'todolist');
//construct
$sql = new DBConnection(SERVER, PORT, USERNAME, PASSWORD, DATABASE_NAME);
//insert
$sql -> insert("blocks", array('null', '3', '4'));
//insert into blocks values (null, 3, 4);
$sql -> insert("blocks", array('name' => '1', 'position' => '2'));
//insert into blocks(name, position) values (1, 2);
//select
$sql -> select('*', 'lines');
//select * from `lines`;
$sql -> select(array('mission', 'status'), 'lines');
//select mission, status from `lines`;
$sql -> select(array('mission', 'status', 'blockId'), 'lines', array('priority = 1',
'id <> 1'));
//select mission, status, blockId from `lines` where priority = 1, id <> 1;
$sql -> select(array('mission', 'status', 'blockId'), 'lines', null, 'status');
//select mission, status, blockId from `lines` order by status;
$sql -> select(array('mission', 'status', 'blockId'), 'lines', null, null,
'0, 100');
//select mission, status, blockId from `lines` limit 0, 100;
//update
$sql -> update('lines', 'col_name1 = expr1');
//update lines set col_name1 = expr1;
$sql -> update('lines', array('col_name1 = expr1', 'col_name2 = expr2'));
//update lines set col_name1 = expr1, col_name2 = expr2;
?>
Также прикрепил файл ------ > ------ > ------ > |