<?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)); } //if(!$result) { throw new fox_db_exception('Zapytanie nie powiodło się! {{{'.mysql_error.'}}}'); } 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)); } //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) { elseif (is_string($param1) && is_string($param2)) { $result = mysql_num_rows($this->query($param1, $param2)); } //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 .= $after_where; //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 {}; ?>
I przykładowy skrypt:
<?php require_once('core.php'); while($p = $db->fetch_assoc("SELECT * FROM {[table]} WHERE id > 0", "tabelka1") { }
Skrypt zapętla się wciąż zwracając pierwszy wynik.
Jednak gdy zrobię tak:
<?php require_once('core.php'); $q = $db->query("SELECT * FROM {[table]} WHERE id > 0", "tabelka1"); while($p = $db->fetch_assoc(false)) { }
wszystko jest w porządku. Takie rozwiązanie mnie nie zadowala, ponieważ w takim wypadku wygodniej jest dać mysql_query i mysql_fetch_assoc .
Proszę nie zwracać uwagi na literówki, ponieważ piszę to z pamięci, gdyż nie mam laptopa ze skryptami przy sobie.