Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MYSQL] Problem z klasą mysql
Forum PHP.pl > Forum > PHP
tomick33
Witam

Znalazłem taką klasę do obsługi mysql z funkcją cache:
  1. <?php
  2. define('CACHE_DIR', './sql_cache/');    //katalog Cache
  3. class sql{
  4.      var $connection;
  5.      var $result;
  6.      var $rows;
  7.  
  8.      var $queries = 0;
  9.  
  10.      var $cache_state =0; //numer aktualnego stanu
  11.      var $cache_file; //nazwa pliku w którym jest przechowywane cache
  12.      var $cache_buffer; //buffor do generowania danych
  13.      var $cache_ptr; //numer ostatniego pola w bufforze
  14.  
  15.       //funkcja łącząca się z bazą danych
  16.      function sql_connect($host, $user, $pass, $db){
  17.         $this->connection = mysql_connect($host, $user, $pass);
  18.         mysql_select_db($db);
  19.      }//
  20.        
  21.      //funkcja zamykająca połączenie z bazą danych
  22.      function sql_close(){
  23.         mysql_close($this->connection);
  24.      }//
  25.      
  26.       //Cashowanie zapytań
  27.       function sql_cache($handle = 0){
  28.         if(is_string($handle)){
  29.            if(file_exists(CACHE_DIR.'a0x_'.$handle.'.666')){
  30.               $this->cache_state   = 1;
  31.               $this->cache_ptr      = 0;
  32.               $this->cache_buffer = unserialize(file_get_contents(CACHE_DIR.'a0x_'.$handle.'.666'));
  33.            }else{
  34.               $this->cache_state = 2;
  35.               $this->cache_buffer = array();
  36.               $this->cache_file = CACHE_DIR.'a0x_'.$handle.'.666';
  37.            }      
  38.         }else{
  39.            if($this->cache_state == 2){
  40.               file_put_contents($this->cache_file, serialize($this->cache_buffer));
  41.            }
  42.            $this -> cache_state = 0;
  43.         }
  44.      }//
  45.          
  46.       //usuwanie cache
  47.       function sql_cache_remove($handle){
  48.         if(file_exists(CACHE_DIR.'a0x_'.$handle.'.666')){
  49.            unlink(CACHE_DIR.'a0x_'.$handle.'.666');
  50.         }
  51.      }//
  52.      
  53.       //funkcja dodawania zapytań do mysql
  54.       function sql_query($query){
  55.         if($this->cache_state != 1)
  56.         {
  57.            $this->result = mysql_query($query);
  58.            $this->queries++;
  59.            
  60.            if(mysql_errno() != 0)
  61.            {
  62.               die('Error: '.mysql_error().'<br/>');
  63.            }
  64.            
  65.            
  66.            return 1;
  67.         }
  68.        
  69.      }//
  70.      
  71.  
  72.      
  73.  
  74.      
  75.       //zwracanie tablic mysql z bazy danych
  76.       function sql_fetch_array(){
  77.         if($this->cache_state == 1){
  78.            if(!isset($this -> cache_buffer[$this->cache_ptr])){
  79.               return 0;
  80.            }
  81.            $this->rows = $this->cache_buffer[$this->cache_ptr];
  82.            $this->cache_ptr++;
  83.            return 1;
  84.         }else{
  85.            if($this->rows = mysql_fetch_assoc($this->result)){
  86.               if($this->cache_state == 2)
  87.               {
  88.                  $this -> cache_buffer[] = $this->rows;
  89.               }
  90.               return 1;
  91.            }
  92.  
  93.  
  94.         }
  95.         return 0;
  96.      }//
  97.  
  98.  
  99.   } // koniec klasy
  100.  
  101. ///////////użycie
  102.   $sql = new sql;
  103.   $sql -> sql_connect('localhost', 'root', '', 'nazwa_bazy');
  104.  
  105. //cache start
  106. $sql->sql_cache('news');
  107.  
  108.  
  109.     $sql->sql_query('SELECT * FROM newsy');
  110.      
  111.     ///
  112.     while($sql->sql_fetch_array())
  113.     {
  114.        echo $sql->rows['id'].' - '.$sql->rows['tytul'].' - '.$sql->rows['autor'].' '.$sql->rows['zrodlo'].' '.$sql->rows['glowna'].'<br/>';
  115.     }
  116.     ///
  117.  
  118. //cache stop
  119. $sql->sql_cache();
  120.  
  121.   $sql->sql_close();
  122. ?>


chciałem podpiąć klasę pod mój skrypt i tutaj mam problem ponieważ używam zapytań typu:

  1. <?php
  2. $pytanie = mysql_query('select * from newsy');
  3. $sprawdz_wyniki = mysql_num_rows($pytanie);
  4. if($sprawdz_wyniki!=0)
  5. {
  6.     while($row = mysql_fetch_array($pytanie))
  7.     {
  8.              //rezultaty
  9.     }
  10. }
  11. else
  12. {
  13. echo 'brak wyników';
  14. }
  15. ?>


ta klasa niestety nie pasuje do tego rozwiązania, jeśli nie ma rekordów to na stronei nie generuje nic lecz tworzy plik cache z zawartością: a:0:{}
Chciałbym Was prosić i zapytać w jaki sposób można przerobić klasę, aby mogła współpracować z metodą pobierania wyników, którą zaprezentowałem wyżej.

Pozdrawiam
bartg
Do klasy dodaj taka funkcje
  1. <?php
  2. function sql_numrows(){
  3.        return mysql_numrows($this->result);
  4.        }
  5.      
  6. /
  7. ?>



  1. <?php
  2. $sql->sql_cache('news');
  3.  
  4.  
  5.    $sql->sql_query('SELECT * FROM newsy');
  6.    
  7.    ///
  8. if($sql->sql_numrows()!=0)
  9.    while($sql->sql_fetch_array())
  10.    {
  11.       //rezultaty
  12.    }
  13. } else {
  14. echo 'brak wyników';
  15. }
  16.    ///
  17.  
  18. //cache stop
  19. $sql->sql_cache();
  20. ?>
tomick33
Cytat(bartg @ 25.12.2008, 15:33:21 ) *
Do klasy dodaj taka funkcje
  1. <?php
  2. function sql_numrows(){
  3.        return mysql_numrows($this->result);
  4.        }
  5.      
  6. /
  7. ?>

To co napisałeś nie wchodzi w rachubę bo klasa wyłącza mysql_query w rezultacie kiedy posiada plik cache więc za pierwszym razem zapytanie działa, ale potem już wywala błąd przy funkcji mysql_num_rows. W sumie z problemem już sobie poradziłem, ale dzięki w każdym razie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.