jestem w trakcie pisania klasy która będzie cachowała wyniki zapytania sql i utknąłem w jedym miejscu. Chodzi o to że w pierwszym kroku tworzymy plik z cache uchwytu i zapisywane jest to do tablicy zserializowanej po czym plik jest oczytywany poprzez unserialize, problem zaczyna się gdy odczytam plik zapisze do tablicy i chce wyświetlić w pętli while wywołanie rekordów z bazy wygląda tak
<?php
$oDb->sql_cache('wiadomosci');
$bHandleArt = $oDb->execute('SELECT tytul FROM mod_artykuly LIMIT 10');
while($aRows = $oDb->fetch_array($bHandleArt)){
echo $aRows['tytul'].'<br />'; }
$oDb->sql_cache();
?>
więc muszę odczytać zcachowany plik w tej samej pętli co zapytanie z bazy. Nie mam pojęcia jak to wykonać, abym tak samo jak wywoluje dane z bazy czyli np $aRows['tytul'] potem mogl zawsze w ten sam sposob bez modyfikacji odczytac plik cache
<?php
include ('config.php');
define('CACHE_DIR', './sql_cache/');
class db {
private $bDbh;
private $bHandleQuery;
private $aCacheBufor = array(); private $sCacheFile;
private $iCacheState;
private function __construct(){
$this->bDbh = mysql_pconnect( config
::$sDbHost, config
::$sDbUser, config
::$sDbPass ); throw new Exception( 'blad polaczenia z baza' );
}
}
}
public static function getInstance
(){ if(self::$oDb == false ){
self::$oDb = new db();
}
return self::$oDb;
}
public function execute( $sQuery ){
if($this->iCacheState == 1){
return 0;
} else {
$this->bHandleQuery = mysql_query( $sQuery, $this->bDbh ); if( !$this->bHandleQuery )
else
return $this->bHandleQuery;
}
}
private function is_cache_file( $sFile ){
}
public function sql_cache( $sHandle = 0 ){
$this->sHandle = $sHandle;
if( !$this->is_cache_file( $this->sHandle ) ){
$this->sCacheFile = CACHE_DIR.'db_'.$this->sHandle.'.buf';
$this->iCacheState = 2;
} else {
$this->iCacheState = 1;
}
} else {
if($this->iCacheState != 1){
file_put_contents
( $this->sCacheFile, serialize($this->aCacheBufor) ); }
}
}
public function fetch_array( $bHandle ){
if( $this->iCacheState == 1 ){
/*
echo'<pre>';
print_r($this->aResult);
echo'</pre>';
*/
} elseif( $this->iCacheState == 2 ) {
}
}
}
try {
$oDb = db::getInstance();
$oDb->sql_cache('wiadomosci');
$bHandleArt = $oDb->execute('SELECT tytul FROM mod_artykuly LIMIT 10');
while($aRows = $oDb->fetch_array($bHandleArt)){
echo $aRows['tytul'].'<br />'; }
$oDb->sql_cache();
}
catch(Exception $e){
}
?>
Ten post edytował dyktek 22.06.2006, 12:56:55