Napisałem sobie prostą klasę do obsługi bazy mysql.
Jak dla mnie klasa sprawuje się znakomicie, proszę o wskazówki dotyczące rozbudowy i optymalizacji klasy.
<?php
/**
* Klasa obsługi bazy danych mysql
*
* @author Michał (Foxbond) Ch. <foxbond at gmail dot com >
* @copyright 2010 Michał Ch.
* @version 0.0.3 PRE-ALPHA
* @access public
* @license All rights reserved! NOT COPY!
* @package *** *****
*/
class fox_db {
/**
* Dane do połączenia (użytkownik, pass, host, prefix itp.)
*
*
*/
/**
* objekt połączenia (wynik mysql_connect() )
*
*
*/
private $_l;
/**
* True/False w zależności czy połączenie jest aktywne
*
*
*/
protected $_connected = false;
/**
* Zawiera wynik ostatniego zapytania
*
*
*/
public $last_query;
public function __construct ($pass, $start=true)
{
{
throw new fox_db_exception('Dane do połączenia z bazą nie są tablicą!');
}
{
throw new fox_db_exception('Info startu nie jest Boolean [ten comment trzeba zmienić]');
}
$this->info = $pass;
if($start === true) { $this->connect(false); }
}
public function connect($czyy=false, $set_names=true, $dane)
{
if($czyy === false && is_array($dane)) { $log = $dane; } else { $log = $this->info; }
if(!$link) { throw new fox_db_exception('Błąd przy połączeniu z bazą!'); }
if(!mysql_select_db($log['db_name'])) { throw
new fox_db_exception
('Błąd przy wyborze bazy danych!'); } if($set_names === true)
{
}
$this->_l = $link;
$this->_connected = true;
return $link;
}
public function query($query, $table)
{
$query = str_replace('{[table]}', $this->info['prefix'].$table, $query); if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error().'}}}'); } $this->last_query = $result;
return $result;
}
public function fetch_array($param1=false, $param2=false)
{
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); } return $result;
}
public function fetch_row($param1=false, $param2=false)
{
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); } return $result;
}
public function fetch_assoc($param1=false, $param2=false)
{
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); } return $result;
}
/**
* Odpowiednik funkcji mysql_num_rows
*
* @param string|resource|boolean $param1 - Parametr 1
* @param string $param2 - parametr 2
* @return array
*/
public function num_rows($param1=false, $param2=false)
{
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); } return $result;
}
/**
* Ta funkcja może sprawiać problemy w zrozumieniu. Całe zapytanie wygląda tak: SELECT COUNT(*) FROM $table WHERE $after_where
*
* @example $db->count_rows('id>0 AND id<300', users);
* @param string $after_where - Co ma być w zapytaniu po where
* @param string $table - Nazwa tabeli na której ma być wykonywana operacja
* @return integer
*/
public function count_rows($after_where, $table)
{
$query = 'SELECT COUNT(*) FROM {[table]} WHERE ';
$query = str_replace('{[table]}', $this->info['prefix'].$table, $query); $query .= $after_where;
if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error().'}}}'); } if(!$result) { throw
new fox_db_exception
('Zapytanie nie powiodło się! {{{'.mysql_error().'}}}'); } $result = $result[0];
return $result;
}
public function is_connected() { return $this->_connected; }
public function disconnect()
{
if(!mysql_close($this->_l
)) { throw
new fox_db_exception
('Nie można zamknąć połączenia z bazą danych!'); } $this->_connected = false;
}
public function __destruct()
{
if ($this->_connected === true)
{
$this->disconnect();
}
}
}
class fox_db_exception extends exception {};
?>
Malutki przykład użycia:
<?php
$passy['host'] = 'localhost';
$passy['user'] = 'root';
$passy['pass'] = '';
$passy['db_name'] = 'baza';
$passy['prefix'] = 's1_';
$db = new fox_db($passy);
//mysql_fetch_array
$r = $db->fetch_array('SELECT * FROM {[table]} WHERE id>30', 'users');
//lub
$o = $db->query('SELECT * FROM {[table]} WHERE id>30', 'users');
$o2 = $db->fetch_array(false);
//lub
$t = $db->query('SELECT * FROM {[table]} WHERE id>30', 'users');
$t2 = $db->fetch_array($t);
//polecenie mysql COUNT
echo $db->count_rows('imie = "Jacek"', 'users'); ?>
I jeszcze jedno pytanie.
Do czego służy
i jakie ma praktyczne zastosowanie przedrostek abstract ?
Z góry dzięki!
EDIT:
Dodałem jeszcze dwa przykłady
Ten post edytował foxbond 26.10.2010, 15:20:50