pgsql
Classe PGsql destinée à faire de l' abstraction de bdd (entre autres).
La classe PGsql reprend les principales fonctionnalités des fonctions PHP associées. Son but, n est donc pas de remplacer ces fonctions, mais de vous permettre , eventuellemnt, de faire de l' abstraction de base de donnée.
La classe integre aussi la fonctionnalité de cache de donnée ainsi qu'une methode facilitant la manipulation de blobs. Les reglages du ramasse miette sont effectués dans la classe elle même avec la variable $Bdd->gc_time=86400 le chemin du répertoire de cache se gere de même avec $Bdd->cache_path='cache'. Lors de la mise en place de la classe penser a créer le répertoire de cache.
Les Méthodes
- PGsql - 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
- prepare_blob - Prepare un binaire, a être inséré dans une requête pgsql.
Exemples
- Exemple Minimal - Connection à la Base de donnée et selection de la base
- Envoi d' une requete
- Récupération et affichage des Résultats ARRAY (1)
- Récupération et affichage des Résultats ARRAY (2)
- Récupération et affichage des Résultats OBJET
- Libérer les résulats, et fermer la connexion
- Fonctionnement du cache de données
- Manipulation des blobs
La Source
<?php
class PGsql {
var $host = 'localhost';
var $user = 'root';
var $pass = '';
var $base;
var $port;
var $connect_id = 0;
var $cache_path = 'cache';
var $gc_time=86400;
var $records;
var $result_id;
var $error;
// PRIVATE : Constructeur initialise les parametres de la connexion
function PGsql($Host='localhost', $User='root', $Pass='', $Base='', $Port='5432') {
$this->host=$Host;
$this->user=$User;
$this->pass=$Pass;
$this->base=$Base;
$this->port = $Port;
require_once('gc.class.php');
$gcsql = new GC();
srand((double)microtime()*1000000);
if (!rand(0,99)) $gcsql->rungc($this->cache_path,$this->gc_time);
}
// PRIVATE : connection à la DB
function connect($Host, $User, $Pass, $Base, $Port) {
$conn_string = "host=$Host port=$Port dbname=$Base user=$User password=$Pass";
$this->connect_id = pg_connect($conn_string);
if ($this->connect_id) {
return $this->connect_id;
}
else return FALSE;
}
// PUBLIC : Envoi d'une requete a la DB
function Send_Query($query) {
if ( !$this->connect_id ) $this->connect($this->host,$this->user,$this->pass,$this->base, $this->port);
if ( $this->result_id = @pg_query( $this->connect_id , $query) ) {
$this->query = trim($query);
$this->error = '';
return $this->result_id;
} else {
//$this->error= pg_result_error ($this->result_id);
$this->error= pg_last_error();
return FALSE;
}
}
// PUBLIC : return the last insert OID
function last_insert_id() {
return pg_last_oid ($this->result_id);
}
// PUBLIC : renvoi le nombre d'enregistrement affecté
function num_rows() {
if ( isset($this->result_id) ) {
if ( preg_match('`^select`i',$this->query) ) return pg_num_rows($this->result_id);
if ( preg_match('`^(insert|update|delete)`i',$this->query) ) return pg_affected_rows($this->result_id);
} else {
return count($this->records);
}
}
function get_object($query) {
return @pg_fetch_object($query);
}
function get_array($query, $mode='ASSOC') {
switch($mode) {
case 'NUMERIC' :
return @pg_fetch_array($query, NULL, PGSQL_NUM);
break;
case 'BOTH' :
return @pg_fetch_array($query, NULL, PGSQL_BOTH);
break;
case 'ASSOC' :
return @pg_fetch_array($query, NULL, PGSQL_ASSOC);
break;
default :
if(phpversion() >= 4.3)
return @pg_fetch_assoc($query);
else
return @pg_fetch_array($query, NULL, PGSQL_ASSOC);
}
}
// PUBLIC : renvoi le msg d'erreur pgsql
function return_error() {
return pg_last_error ();
}
// PUBLIC : ferme la connection;
function close() {
return pg_close($this->connect_id) ;
}
// PUBLIC : vide les resultat des requete
function free_result() {
return @pg_free_result($this->connect_id);
}
function file_get_contents ($file) {
if( phpversion() >= 4.3 )
return file_get_contents($file);
return join( '', file( $file ) );
}
// PUBLIC : execute une requete(SELECT) et renvoi le tableau des resultat via le cache
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($this->file_get_contents($this->cachename));
} else {
if (!($result=$this->Send_Query($request))) return FALSE;
while ($record = pg_fetch_array($result, NULL, PGSQL_ASSOC) ) {
$records[] = $record;
}
$OUTPUT = serialize($records);
$fp = fopen($this->cachename,"wb");
@flock($fp,2);
fputs($fp, $OUTPUT);
@flock($fp,3);
fclose($fp);
}
//$this->records=$records;
return $records;
}
// PUBLIC : ajoute les slashe sql et C pour le stockage des BLOB
function prepare_blob($file) {
$blob = $this->file_get_contents($file);
$blob = addslashes($blob);
$blob = addcslashes($blob, "\0");
return $blob;
}
}
?>
class PGsql {
var $host = 'localhost';
var $user = 'root';
var $pass = '';
var $base;
var $port;
var $connect_id = 0;
var $cache_path = 'cache';
var $gc_time=86400;
var $records;
var $result_id;
var $error;
// PRIVATE : Constructeur initialise les parametres de la connexion
function PGsql($Host='localhost', $User='root', $Pass='', $Base='', $Port='5432') {
$this->host=$Host;
$this->user=$User;
$this->pass=$Pass;
$this->base=$Base;
$this->port = $Port;
require_once('gc.class.php');
$gcsql = new GC();
srand((double)microtime()*1000000);
if (!rand(0,99)) $gcsql->rungc($this->cache_path,$this->gc_time);
}
// PRIVATE : connection à la DB
function connect($Host, $User, $Pass, $Base, $Port) {
$conn_string = "host=$Host port=$Port dbname=$Base user=$User password=$Pass";
$this->connect_id = pg_connect($conn_string);
if ($this->connect_id) {
return $this->connect_id;
}
else return FALSE;
}
// PUBLIC : Envoi d'une requete a la DB
function Send_Query($query) {
if ( !$this->connect_id ) $this->connect($this->host,$this->user,$this->pass,$this->base, $this->port);
if ( $this->result_id = @pg_query( $this->connect_id , $query) ) {
$this->query = trim($query);
$this->error = '';
return $this->result_id;
} else {
//$this->error= pg_result_error ($this->result_id);
$this->error= pg_last_error();
return FALSE;
}
}
// PUBLIC : return the last insert OID
function last_insert_id() {
return pg_last_oid ($this->result_id);
}
// PUBLIC : renvoi le nombre d'enregistrement affecté
function num_rows() {
if ( isset($this->result_id) ) {
if ( preg_match('`^select`i',$this->query) ) return pg_num_rows($this->result_id);
if ( preg_match('`^(insert|update|delete)`i',$this->query) ) return pg_affected_rows($this->result_id);
} else {
return count($this->records);
}
}
function get_object($query) {
return @pg_fetch_object($query);
}
function get_array($query, $mode='ASSOC') {
switch($mode) {
case 'NUMERIC' :
return @pg_fetch_array($query, NULL, PGSQL_NUM);
break;
case 'BOTH' :
return @pg_fetch_array($query, NULL, PGSQL_BOTH);
break;
case 'ASSOC' :
return @pg_fetch_array($query, NULL, PGSQL_ASSOC);
break;
default :
if(phpversion() >= 4.3)
return @pg_fetch_assoc($query);
else
return @pg_fetch_array($query, NULL, PGSQL_ASSOC);
}
}
// PUBLIC : renvoi le msg d'erreur pgsql
function return_error() {
return pg_last_error ();
}
// PUBLIC : ferme la connection;
function close() {
return pg_close($this->connect_id) ;
}
// PUBLIC : vide les resultat des requete
function free_result() {
return @pg_free_result($this->connect_id);
}
function file_get_contents ($file) {
if( phpversion() >= 4.3 )
return file_get_contents($file);
return join( '', file( $file ) );
}
// PUBLIC : execute une requete(SELECT) et renvoi le tableau des resultat via le cache
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($this->file_get_contents($this->cachename));
} else {
if (!($result=$this->Send_Query($request))) return FALSE;
while ($record = pg_fetch_array($result, NULL, PGSQL_ASSOC) ) {
$records[] = $record;
}
$OUTPUT = serialize($records);
$fp = fopen($this->cachename,"wb");
@flock($fp,2);
fputs($fp, $OUTPUT);
@flock($fp,3);
fclose($fp);
}
//$this->records=$records;
return $records;
}
// PUBLIC : ajoute les slashe sql et C pour le stockage des BLOB
function prepare_blob($file) {
$blob = $this->file_get_contents($file);
$blob = addslashes($blob);
$blob = addcslashes($blob, "\0");
return $blob;
}
}
?>