Logo classes.scriptsphp.org PHP

go to nav bar

SQLite

Classe SQLite destinée à faire de l'abstraction de bdd (entre autres). Attention, cette classe nécessite PHP 5 !

La classe SQLite reprend les principales fonctionnalités des fonctions PHP associées. Son but, n'est donc pas de remplacer ces fonctions, mais de vous permettre , éventuellement, de faire de l'abstraction de base de données. Notamment grâce à une classe PostgresSQL, ou MySQL... La classe intègre aussi la fonctionnalité de cache de donnée .

Les réglages du ramasse miettes sont effectués dans la classe elle même avec la variable $Bdd->gc_time=86400. Le chemin du répertoire de cache se gère de même avec $Bdd->cache_path='cache'. Lors de la mise en place de la classe penser à créer le répertoire de cache.

WARNING : penser à protéger votre fichier de base de données SQLlite en le mettant dans un répertoire protégé par un .htaccess par exemple, car en le laissant dans l'arborescence web n'importe qui pourrait récupérer vos données.

Les Méthodes

  • SQLite - Nouvelle Instance
  • connect - Connection et sélection de la Base
  • send_query - Envoyez une requete
  • num_rows - Nombre de résultat(s) retourné(s) par une requete
  • get_cached_data - Envoie une requete et met le resultat au cache

Exemples

  1. Exemple Minimal - Sélection de la base
  2. Envoi d' une requête - Création d' une table
  3. Insertion de données dans une table
  4. Récupération de données dans une table

La Source

<?php
/**********************************************************************************************************/
abstract class GC {
    
    function 
rungc($cache_path,$gc_max) {
        
/*
        Ici on a une routine de ramasse miette
        qui nettoie le contenu du cache des fichiers hors d'age
        et evite d'avoir un cache trop volumineux
        tout les fichiers dont l'age est supérieur a gc_max
        sont supprimés
        */
        //echo "<p>.:| GC chemin:$cache_path |:.</p>";
        //$handle=opendir(dirname($cache_path));
        
$handle=opendir($cache_path);
        while (
$file readdir($handle)) {
            
$path=dirname($cache_path).'/'.$file;
            
//echo "<p>.:| $path |:.</p>";
            
if ( is_file($path) && filemtime($path)<time()-$gc_max && $file!='.htaccess' ) {
                
GC::delfile($path);
            }
        }

    }

    function 
delfile($file) {
        
/*
        là une routine qui permet l'effacement du fichier file
        sous unix puis windows
        */
        
@unlink($file);
        
clearstatcache();
        if (@
file_exists($file)) {
            
$filesys str_replace("/""\\"$file);
            @
system("del $filesys");
            
clearstatcache();
            if (@
file_exists($file)) {
                @
chmod ($file0775);
                @
unlink($file);
                @
system("del $filesys");
            }
        }
        
clearstatcache();
        return @
file_exists($file);
        
/*
        if (@file_exists($file)) {return FALSE; }
        else { return TRUE; }
        */
    
}
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class SQLite extends GC {


    public 
$base;
    public 
$cache_path 'cache';
    public 
$gc_time=86400;

    private 
$connect_id 0;
    private 
$error;
    private 
$records = array();


    function 
__construct($Host=''$User=''$Pass=''$Base='mabase') {
        
$this->base=$Base;
        
        
//require_once('gc.php');
        //$gcsql = new GC($this->cache_path, $this->gc_time);
        
srand((double)microtime()*1000000);
        if (!
rand(0,99)) {
            
parent::rungc($this->cache_path,$this->gc_time);
        }
    }

    function 
__destruct() {
        if(
$this->connect_id) {
            
$this->close($this->connect_id);
        }
    }

    public function 
connect($Base) {
         
//$this->connect_id = @sqlite_open($Base, 0666, $this->error);
         /*
         if($this->connect_id) {
             return $this->connect_id;
         }
         */
        
return $this->connect_id = @sqlite_open($Base0666$this->error);
    }

    public function 
Send_Query($query) {
        if ( !
$this->connect_id $this->connect($this->base);
        if ( 
$this->result_id = @sqlite_query($query$this->connect_id) ) {
            
$this->query trim($query);
            
$this->error '';
            return 
$this->result_id;
        } else {
            
$this->errorsqlite_error_string(sqlite_last_error($this->connect_id));
            
//echo $this->error;
            //echo $query;
            
return FALSE;
        }
    }


    public function 
last_insert_id() {
        return @
sqlite_last_insert_rowid();
    }

    public function 
num_rows() {
        if ( isset(
$this->result_id) ) {
            if ( 
preg_match('`^select`i',trim($this->query)) ) {
                return @
sqlite_num_rows($this->result_id);
            }
            
//if ( preg_match('`^(insert|update|delete)`i',$this->query) ) return mysql_affected_rows($this->result_id);
        
} else {
            return 
count($this->records);
        }
    }

    public function 
get_object($query) {
        
//return @mysql_fetch_object($query);
    
}
    
    public function 
get_array($query$mode='ASSOC') {
        switch(
$mode) {
            case 
'NUMERIC' :
            return @
sqlite_fetch_array($querySQLITE_NUM);
            break;
            case 
'BOTH' :
            return @
sqlite_fetch_array($query);
            break;
            case 
'ASSOC' :
            default :
            return @
sqlite_fetch_array($querySQLITE_ASSOC);
        }
    }

    public function 
return_error() {
        return 
sqlite_error_string(sqlite_last_error($this->connect_id));
    }
    
    
// PUBLIC : ferme la connection;
    
public function close() {
        return 
sqlite_close($this->connect_id) ;
    }
    
    
// PUBLIC : vide les resultat des requete
    
public function free_result() {

    }

    public function 
get_cached_data($request,$time=0) {
        
$this->cachename=$this->cache_path.'/'.md5($request).'.cachesql';
        if ( 
file_exists($this->cachename) && filemtime($this->cachename) > (time() - $time)) {
            
$records unserialize(file_get_contents($this->cachename));
        } else {
            if (!(
$this->result=$this->Send_Query($request))) return FALSE;
            while (
$record $this->get_array($this->result) ) {
                
$records[] = $record;
            }
            
$OUTPUT serialize($records);
            
$fp fopen($this->cachename,"wb");
            @
flock($fp,2);
            
fputs($fp$OUTPUT);
            @
flock($fp,3);
            
fclose($fp);
        }
        return 
$records;
    }
    
    
    
// PUBLIC : ajoute les slashe sql et C pour le stockage des BLOB
    
public function prepare_blob($file) {
        
$blob file_get_contents($file);
        
$blob addslashes($blob);
        
$blob addcslashes($blob"\0");
        return 
$blob;
    }

}
// end class







?>

Merci de ne pas suivre ce lien emails.

0.0470s | «»
PHP powered