connexion($host, $user, $pass, $db); } public function connexion($host, $user, $pass, $db=null) { if ($this->session) { $this->deconnexion(); } $this->reponse = null; $host = pg_escape_string($host); $user = pg_escape_string($user); $pass = pg_escape_string($pass); $db = pg_escape_string($db); $this->session = pg_connect("host='$host' port=5432 dbname='$db' user='$user' password='$pass'"); 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; } pg_setclientencoding($this->session, 'UTF8'); $this->host = $host; $this->user = $user; $this->password = $pass; $this->database = $db; $this->connected = true; } 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); } } public function deconnexion() { if (!$this->session) { return false; } $r = pg_close($this->session); $this->session = false; $this->connected = false; return $r; } public function erreur() { if (!$this->session) { return false; } return pg_last_error($this->session); } public function db($db) { if (!$this->session) { return false; } return $this->database = pg_query($this->session, "\\connect ".pg_escape_string($db)) ? $db : $this->database; } public function escape(&$var) { if (!$this->session) { return false; } $var = pg_escape_string($this->session, $var); return $var; } public function query($query) { if (!$this->session) { return false; } $this->reponse = pg_query($this->session, $query); global $db_config; if (!$this->reponse && $db_config['log']) { elog('Erreur PostgreSQL: " '.$this->erreur().' ", avec la requète: { '.$query.' }.', 1); } $this->num_rows = pg_num_rows($this->reponse); 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; } return $sortie; } else { return false; } } public function unique_query($query) { if (!$this->session) { return false; } $this->reponse = pg_query($this->session, $query); global $db_config; if (!$this->reponse && $db_config['log']) { elog('Erreur PostgreSQL: " '.$this->erreur().' ", avec la requète: { '.$query.' }.', 1); } $this->num_rows = pg_num_rows($this->reponse); if ($this->num_rows == 0) { return null; } elseif ($this->num_rows >= 1) { return pg_fetch_assoc($this->reponse); } else { return false; } } public function affected() { if (!$this->session) { return false; } return pg_affected_rows($this->reponse); } 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); } }