Prosiłbym o sprawdzenie poprawności w napisaniu klasy do "keszowania" zapytań mysql (czy chociaż dobrze zacząłem ją pisać), gdyż nie mam wiedzy na temat zaawansowanego programowania w php (którego trochę mogłem już zapomnieć) i zawsze używałem gotowych klas mysql. Klasa nie jest jeszcze dopracowana.
//Klasa mysql cache class mysql { //Ustawienia private $folder='temp/'; //Folder cache //Pomocne w klasie private $connect; //Do połączenia i zamykania połączenia z mysql public $cache_stan=0; //Pomaga w zakończeniu pętli w fetch_assoc() public $array_num=0; //Ostatni numer tablicy private $zapytanie_bez_cache; //Gdy cache jest nieaktywne przypisuje mu wyniki z mysql_query(), aby móc odtworzyć rekordy z użyciem w funkcji klasy: fetch_assoc private $cache_name; //Nazwa pliku cache public $queries=0; //Zlicza zapytania ########## Konstruktor ########## function __construct($host,$user,$pass,$baza) { $this->connect=@mysql_connect($host,$user,$pass) or die('Nie mogę się połączyć z mysql <br /> Błąd: '.mysql_error()); } ############################## ########## Destruktor function __destruct() { } ############################## ########## Zapytanie ########## public function query($zapytanie, $cache=false) //Drugi parametr określa, czy włączyć cache i jednocześnie przypisuje nazwę pliku { $this->cache_name=$cache; //Daje znać, czy użyć cache jednocześnie tworząc nazwę pliku if($this->cache_name) //Z cachowaniem (czy nazwa pliku cache została podana) { { $this->cache_buffer=unserialize(file_get_contents(''.$this->folder.''.$this->cache_name.'.plik')); //Wczytuje tablice z pliku } else //Gdy nie ma pliku cache, to tworzymy go { $wynik=mysql_query($zapytanie) or die('Problem z zapytaniem <br /> Błąd: '.mysql_error()); //Zapytanie do bazy $this->queries++; //Liczba zapytań rośnie { $temp[]= $r; } $this->cache_buffer=$temp; //Przenosi tablicę z wynikami do buffera @file_put_contents(''.$this->folder.''.$this->cache_name.'.plik',serialize($temp)); //umieszczenie pliku } return 1; } else //Bez cachowania { die('Problem z zapytaniem<br /> Błąd: '.mysql_error()); //Zapytanie do bazy, przypisuje je zmiennej, aby móc potem pobrać rekordy $this->queries++; //Liczba zapytań rośnie } } ############################## ########## Pobieranie wyników ########## public function fetch_assoc() { if($this->cache_name) //Z cachowaniem { if($this->array_num==$this->cache_stan){ //Czy ilość elementów jest równa numerowi tablicy, jeśli nie, to numer tablicy się zwiększa return 0; //Pobrano wszystkie elementy tablicy - koniec pętli } else { $this->row = $this->cache_buffer[$this->cache_stan]; //Tworzy tablicę do wyświetlania wyników, począwszy od tablicy z numerem 0 $this->cache_stan++; return 1; //Pobiera elementy, indeks zwiększa się, pętla trwa } } else //Bez cachowania { return $this->row; } } ######################################## ########## Mysql_num_rows ########## public function num_rows() { if($this->cache_name) //Z cachowaniem { return $this->array_num; } else //Bez cachowania { } } #################################### } ################################################## ###################### TEST ###################### ##BENCHMARK function czas() { $a= (double)$time[0]; $b= (double)$time[1]; return $b + $a; } ##BENCHMARK $poczatek = czas(); $x=0; $sql->query('SELECT nazwa FROM rekordy ORDER BY id DESC LIMIT 100','NazwaPlikuCache'); //Drugi parametr tworzy plik cache o takiej nazwie, nie podając go cache się wyłącza while($sql->fetch_assoc()) { $x++; } $koniec= czas(); $c = $koniec - $poczatek; ################################################## ###################### TEST ######################