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) { 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) { $this->last_query = $result; return $result; } public function fetch_array($param1=false, $param2=false) { elseif (is_string($param1) && is_string($param2)) { $result = mysql_fetch_array($this->query($param1, $param2)); } return $result; } public function fetch_row($param1=false, $param2=false) { elseif (is_string($param1) && is_string($param2)) { $result = mysql_fetch_row($this->query($param1, $param2)); } return $result; } public function fetch_assoc($param1=false, $param2=false) { elseif (is_string($param1) && is_string($param2)) { $result = mysql_fetch_assoc($this->query($param1, $param2)); } 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) { elseif (is_string($param1) && is_string($param2)) { $result = mysql_num_rows($this->query($param1, $param2)); } 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 .= $after_where; $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 ?>
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