2009-11-01 11:00:00 +00:00
< ? php
class BDD
2020-11-21 18:54:32 +00:00
{
public $connected ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
private $session ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
private $reponse ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public $host ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public $user ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
private $password ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public $database ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public $num_rows ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public $nodb ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function __construct ( $profile = null )
{
if ( $profile === false ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
global $db_config ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( empty ( $profile )) {
if ( ! $db_config [ 'profile' ]) {
return false ;
}
$profile = & $db_config [ 'profile' ];
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( ! ctype_alnum ( $profile )) {
trigger_error ( 'Le nom du profil contient des caracteres illegaux' , E_USER_ERROR );
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( $db_config [ 'profile' ]) {
require ( ONYX . 'db/' . $profile . '.profile.php' );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$db = & $___profile [ 'db' ];
$host = & $___profile [ 'host' ];
$user = & $___profile [ 'user' ];
$pass = & $___profile [ 'pass' ];
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( $db_config [ 'crypt' ]) {
$pass = dbpass ( $pass , $db_config [ 'crypt' ]);
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
return $this -> connexion ( $host , $user , $pass , $db );
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function connexion ( $host , $user , $pass , $db = null )
{
if ( $this -> session ) {
$this -> deconnexion ();
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> reponse = null ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$host = pg_escape_string ( $host );
$user = pg_escape_string ( $user );
$pass = pg_escape_string ( $pass );
$db = pg_escape_string ( $db );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> session = pg_connect ( " host=' $host ' port=5432 dbname=' $db ' user=' $user ' password=' $pass ' " );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( ! $this -> session ) {
elog ( 'Connexion impossible a la base de donnee : ' . $this -> erreur (), 2 );
if ( function_exists ( $this -> nodb )) {
call_user_func ( $this -> nodb );
}
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
pg_setclientencoding ( $this -> session , 'UTF8' );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> host = $host ;
$this -> user = $user ;
$this -> password = $pass ;
$this -> database = $db ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> connected = true ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function reconnexion ()
{
if ( ! empty ( $this -> host ) && ! empty ( $this -> user ) && ! empty ( $this -> password ) && ! empty ( $this -> database )) {
$this -> connexion ( $this -> host , $this -> user , $this -> password , $this -> database );
}
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function deconnexion ()
{
if ( ! $this -> session ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$r = pg_close ( $this -> session );
$this -> session = false ;
$this -> connected = false ;
return $r ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function erreur ()
{
if ( ! $this -> session ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
return pg_last_error ( $this -> session );
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function db ( $db )
{
if ( ! $this -> session ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
return $this -> database = pg_query ( $this -> session , " \\ connect " . pg_escape_string ( $db )) ? $db : $this -> database ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function escape ( & $var )
{
if ( ! $this -> session ) {
return false ;
}
$var = pg_escape_string ( $this -> session , $var );
return $var ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function query ( $query )
{
if ( ! $this -> session ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> reponse = pg_query ( $this -> session , $query );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
global $db_config ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( ! $this -> reponse && $db_config [ 'log' ]) {
elog ( 'Erreur PostgreSQL: " ' . $this -> erreur () . ' ", avec la requète: { ' . $query . ' }.' , 1 );
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> num_rows = pg_num_rows ( $this -> reponse );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( $this -> num_rows == 0 ) {
return null ;
} elseif ( $this -> num_rows >= 1 ) {
for ( $i = 0 ; $var = pg_fetch_assoc ( $this -> reponse ); $i ++ ) {
$sortie [ $i ] = $var ;
2009-11-01 11:00:00 +00:00
}
2020-11-21 18:54:32 +00:00
return $sortie ;
} else {
return false ;
}
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function unique_query ( $query )
{
if ( ! $this -> session ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> reponse = pg_query ( $this -> session , $query );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
global $db_config ;
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( ! $this -> reponse && $db_config [ 'log' ]) {
elog ( 'Erreur PostgreSQL: " ' . $this -> erreur () . ' ", avec la requète: { ' . $query . ' }.' , 1 );
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
$this -> num_rows = pg_num_rows ( $this -> reponse );
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
if ( $this -> num_rows == 0 ) {
return null ;
} elseif ( $this -> num_rows >= 1 ) {
return pg_fetch_assoc ( $this -> reponse );
} else {
return false ;
}
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
public function affected ()
{
if ( ! $this -> session ) {
return false ;
}
2021-01-01 13:25:59 +00:00
2020-11-21 18:54:32 +00:00
return pg_affected_rows ( $this -> reponse );
2009-11-01 11:00:00 +00:00
}
2021-01-01 13:26:24 +00:00
public function update_classement ()
{
if ( ! $this -> session ) {
return false ;
}
global $table_user ;
$query = " UPDATE $table_user SET place_points=subquery.rn FROM (SELECT id, points, place_points, row_number() over (order by points DESC) as rn FROM $table_user ) AS subquery WHERE $table_user .id=subquery.id; " ;
pg_query ( $this -> session , $query );
}
2020-11-21 18:54:32 +00:00
}